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

OpenCV:检测区域中的黑白渐变,opencv,augmented-reality,convolution,photogrammetry,Opencv,Augmented Reality,Convolution,Photogrammetry,为了更好地理解,我上传了一个示例图像: 在图像中,您可以看到一些扫描线和一个标记(带有圆圈的白色重角)。我希望OpenCV沿着一个指定的区域(在通过扫描线勾勒出的示例中)移动,该区域应该在5x5左右。如果该区域包含从黑色到白色的渐变,我希望OpenCV保存该区域的位置,以便以后使用它 最终的结果将是区分标记和其他通过黑白线分离的复角 这样可能吗?我在谷歌上搜索了很多次,但我只找到了边缘检测器,但这不是我想要的,我真的需要只检测从黑到白的梯度 提前感谢。通过计算直方图过滤掉一些区域是个好主意。 您

为了更好地理解,我上传了一个示例图像:

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

最终的结果将是区分标记和其他通过黑白线分离的复角

这样可能吗?我在谷歌上搜索了很多次,但我只找到了边缘检测器,但这不是我想要的,我真的需要只检测从黑到白的梯度


提前感谢。

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

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


希望能有帮助

谢谢你的回答,但这并没有帮我解决这个问题。我想用直方图来解决这个问题,但这并不是我想要的

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

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

然后,我使用ransac算法从这些点构造线。它为每个标记边缘构造大约5-20条线。然后我看了看彼此相交的线条,并保存了以直角相交的线条的位置。 我从中得到的4个点是标记的边缘

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

找到点后和构造线前保存的示例图片: 您所描述的是边缘检测。这就是Canny边缘检测器的工作原理。它在亮像素附近寻找暗像素,并基于您传入的阈值(还有自适应canny,它为您计算出阈值),并将它们设置为全黑或全白(也称为“标记”)

请看这里: