我必须找到图像中的十字。我所知道的是每个红色方 block 的确切位置。现在我必须决定,广场内是否有十字架。最好和最快的方法是什么?我正在使用 OpenCv/c++!那么,我可以尝试使用 OpenCv 的 SVM?但是速度快吗?您还有其他想法吗?
最佳答案
如果你真的有每个数字框的中心坐标,你也许可以稍微调整图像采集,这应该是一个可行的任务。 我在这里看到的问题是,你的图像中有一个亮度梯度,你应该通过拍摄更好的照片或使用大的高斯滤波器和图像减法来消除它。 否则,我不确定您会找到一个好的亮度阈值来区分交叉与非交叉。
您可以使用的另一种方法是计算像素的方差。这为您提供了一个很好的局部测量,无论深色笔是否分散了您的像素分布。快速测试看起来很有希望
请注意,我没有盒子的真实位置。我只是将您的图像划分为大小相等的区域,这对于类似框/子框的结构来说并不正确。因此,由于每个左上角的红色三角形和一些重叠的十字,其中存在一些误报。
这就是我所做的:
- 将没有红色 channel 的图像设为灰度图像。
- 使用半径为 100 的高斯分布过滤此图像并从图像中减去它。
- 我把你的图像分成了 (7*6)x(7*2) 个子区域。
- 计算每个子区域的方差,并为上图使用大约 0.017 的方差阈值
- 每个方差较大的框都被划掉。
关于image-processing - 图像交叉检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8492837/