OpenCV:检测区域中的黑色到白色渐变

时间:2010-08-04 14:45:08

标签: opencv augmented-reality convolution photogrammetry

我上传了一个示例图片以便更好地理解:http://www.imagebanana.com/view/kaja46ko/test.jpg

在图像中,您可以看到一些扫描线和一个标记(带有圆圈的白色视角)。我希望OpenCV沿着指定区域(在通过扫描线概述的示例中)应该是大约5x5。如果该区域包含从黑到白的渐变,我希望OpenCV保存该区域的位置,以便我以后可以使用它。

最终结果是区分标记和通过黑线和白线分开的其他重新校正。

这样的事情可能吗?我google了很多,但我只找到了边缘探测器,但这不是我想要的,我真的只需要检测黑到白渐变。

提前致谢。

3 个答案:

答案 0 :(得分:2)

通过计算直方图来过滤掉一些区域是个好主意。 您可以使用cvCalcHist执行任务,然后您可以建立一些阈值以确定黑白像素百分比是否与渐变的百分比相对应。这不会解决任务,但它可以帮助您降低复杂性。

然后,您可以侵蚀图像以合并所有白色区域。应用阈值后,可以找到将黑色区域或白色区域中的图像分开的连接组件(使用cvFindContours)。然后,您可以通过查找同时包含一个白色区域和黑色区域的5x5区域来检测渐变。

希望它有所帮助。

答案 1 :(得分:1)

感谢你的回答者dnul,但它并没有真正帮助我解决这个问题。我虽然想要一个直方图来解决这个问题,但这并不是我想要的。

我通过创建一个40x40矩阵解决了这个问题,该矩阵包含5x5矩阵,其中包含所有3个通道中的原始像素数据。我通过每个40px区域迭代,并在每个5px区域的边界内迭代。我检查了每个像素并保存了那些比存储器更暗的存储器。

在迭代之后,我粗略地了解了它们有多少个黑色像素,所以我检查了它们中的每个像素,以查找所有3个通道中具有白色像素的邻居。然后我标记了每个像素并将它们保存到另一个存储器中。

然后我使用ransac算法构造这些点之外的行。它构建每个标记边缘约5-20行。然后我看着彼此相遇的线条,并保存了那些以方角相交的位置。 我得到的4个点是标记的边缘。

如果要重现此效果,则必须事先过滤图像并应用阈值,以便更容易区分黑白像素。

示例图片,在找到点之后和构造线之前保存: http://www.imagebanana.com/view/i6gfe6qi/9.jpg

答案 2 :(得分:0)

您所描述的边缘检测。这就是Canny边缘探测器的工作原理。它会在光像素附近查找暗像素,并根据您传入的阈值(还有自适应canny,为您计算出阈值),并将它们设置为全黑或全白(也就是'标记'它们) )。

见这里: http://docs.opencv.org/doc/tutorials/imgproc/imgtrans/canny_detector/canny_detector.html