我有一个灰度的原始图像:

我想检测物体的边缘。然而,边缘附近的光照对其有影响。这就是我在高斯模糊和Canny边缘检测之后得到的结果:

这是我的密码:
cv::cvtColor(imgOriginal, imgGrayscale, CV_BGR2GRAY); // convert to grayscale
cv::GaussianBlur(crop, // input image
imgBlurred, // output image
cv::Size(5, 5), // smoothing window width and height in pixels
5); // sigma value, determines how much the image will be blurred
cv::Canny(imgBlurred, // input image
imgCanny, // output image
0, // low threshold
100); // high threshold光源在物体下面。物体边缘的照明来自光源或光的反射。他们总是在同一个地方。
照明也被检测为边缘。我尝试过其他几种方法,例如连接组件标记和用示例代码对图像进行二值化(这里是初学者),但都是有用的。有没有检测干净边缘照明的方法?
发布于 2017-03-08 08:22:42
背景光补丁可以使用一些具有相当大内核的冲蚀来移除,因为对象比光补丁要大得多。
您可以尝试的另一个常见技术是使用距离变换+分水岭。距离转换可能会返回对象内部的返回点(因为该对象几乎没有黑暗区域)。分水岭将试图找到与确认点相连接的区域(通过比较梯度)。如果距离变换给出对象内的多个点,则可能需要在分水岭之后组合多个区域。
发布于 2017-03-08 07:12:29
要彻底解决这个问题是不可能的。边缘检测器能检测到的是由物体边缘引起的强度变化。考虑到你在那里的照明,照明引起的变化是相当突出的。
我建议有两种方法来解决这个问题:
https://stackoverflow.com/questions/42639606
复制相似问题