【发布时间】:2017-03-07 03:23:09
【问题描述】:
我有这张灰度原始图像:
我想检测物体的边缘。但是,它会受到边缘附近照明的影响。这是我在高斯模糊和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
光源位于物体下方。物体边缘的照明来自光源或光的反射。他们总是在同一个地方。
照明也被检测为边缘。我尝试了其他几种方法,例如连接组件标记和使用 示例代码(这里是初学者)对图像进行二值化,但都成功了。有什么方法可以检测干净的边缘照明?
【问题讨论】:
-
你需要做一些预处理来掩盖它。你能告诉我们更多关于这种照明的信息吗?它总是在同一个地方吗?你能得到一些没有对象的基线图像吗?
-
嗨@DanMašek,我尝试对图像进行二值化或使用 Otsu 方法但失败了。光源位于物体下方。物体边缘的照明来自光源或光的反射。他们总是在同一个地方。当物体移动时,它会覆盖光源并在边缘发生照明。
-
尝试在canny edge之前做adaptive thresholding或CLAHE
标签: c++ opencv edge-detection connected-components canny-operator