2010-08-04 121 views
1

我上传了更好的理解的示例图像:http://www.imagebanana.com/view/kaja46ko/test.jpgOpenCV的:检测黑到白的渐变区域中的

在图像,你可以看到一些扫描线和标记(白色retangle在它的圆圈)。我希望OpenCV沿着应该在5x5左右的指定区域(在通过扫描线描述的示例中)前进。如果该区域包含从黑色到白色的渐变色,我希望OpenCV保存该区域的位置,以便稍后使用它。

最终的结果将是区分标记和其他分隔槽黑白线之间的网格。

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

在此先感谢。

回答

1

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

我通过创建一个40x40矩阵来解决这个问题,该矩阵包含所有3个通道中包含原始像素数据的5x5矩阵。我遍历每个40px区域,并在每个5px区域的边界迭代。我检查了每个像素并保存了较暗的那个,然后存储了一定的阈值。

迭代后,我有一个粗略的想法,他们是多少黑色像素,所以我检查他们每个人的所有3个通道中的白色像素的邻居。然后我标记每个像素并将它们保存到另一个存储器。

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

如果你想重现这一点,你必须事先过滤图像,并应用一个阈值,以便更容易区分黑白像素。

一个样本图片,找到后点,构建线之前保存: http://www.imagebanana.com/view/i6gfe6qi/9.jpg

2

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

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

希望它帮助。