【问题标题】:Opencv Hole detectionOpencv空洞检测
【发布时间】:2015-04-05 12:50:49
【问题描述】:

我有一张图像,我想检测对象内部的孔(用它来计算每个孔的面积)。这是我使用 opencv 操作后的图像。

问题是背景和孔的颜色相同。

所以我不知道如何将它们分开,也不知道应该使用什么算法来检测这些漏洞。

cv::threshold(channel[1], channel[1], 190, 255, CV_THRESH_BINARY);
cv::Mat element = cv::getStructuringElement(cv::MORPH_RECT, cv::Size(3, 3));
cv::morphologyEx(channel[1], channel[1], cv::MORPH_OPEN, element);
cv::dilate(channel[1], channel[1], element);
cv::bitwise_not(channel[1], channel[1]);
cv::imwrite("green_after.bmp", channel[1]);

cv::Mat dist;
cv::distanceTransform(channel[1], dist, CV_DIST_L2, 3);
cv::imwrite("dist.bmp", dist);
cv::normalize(dist, dist, 0, 1., cv::NORM_MINMAX);
cv::imwrite("dist2.bmp", dist);
cv::threshold(dist, dist, .1, 1., cv::THRESH_BINARY);
cv::imwrite("dist3.bmp", dist);
cv::normalize(dist, dist, 0.0, 255.0, cv::NORM_MINMAX);
cv::imwrite("dist4.bmp", dist);

cv::Mat invSrc = cv::Scalar::all(255) - dist;
cv::imwrite("dist5.bmp", invSrc);

接下来我该怎么做?

【问题讨论】:

  • “洞”的定义有点不清楚。在大黑色斑点内有一些相当大的白色区域。这些是背景还是漏洞?
  • 我会将它们视为漏洞
  • 它需要全自动工作,还是允许手动交互(点击图片)?

标签: c++ image opencv


【解决方案1】:

第一步是二值化和反相。通过这些步骤,您可以获得具有黑色背景、白色物体和黑洞的二值图像。

接下来我建议您使用带有参数 CV_RETR_CCOMP(或带有 CV_RETR_TREE)的 findContour 方法:

findContour method in OpenCV

这个带有 CV_RETR_CCOMP 参数的方法找到所有白色物体的外部轮廓,并确定每个孔的内部轮廓。 "它检索所有的轮廓并将它们组织成一个两级层次结构。在顶层,有组件的外部边界。在第二层,有孔的边界。如果有另一个轮廓在连接组件的孔内,它仍然放在顶层。”

如果您有分层结构中的孔的轮廓,您可以通过矩计算、边界矩形计算等继续图像处理 (Contour Features)。

findContour方法的用法写在这个问题:

Using hierarchy in findContours () in OpenCV?

【讨论】:

    【解决方案2】:

    您可以进行模板匹配——图像处理中互相关的应用——非常简单。

    如果您碰巧有上面图片的模板(即没有孔或任何间隙的预期图片)。您可以执行 Xcorrelation,即模板匹配以确定是否有任何漏洞。如果没有洞,你应该得到一个完美的匹配,否则没有匹配。正如@Hans 在下面评论的那样,背景仍然是白色 - 这有点棘手。

    看看这个 - http://docs.opencv.org/doc/tutorials/imgproc/histograms/template_matching/template_matching.html

    我能想到的解决方案之一是:

    1) 从相同大小的全黑背景图像中减去您的图像,即白色图像的所有像素值都应对应于所有白色。

    2) 查看索引。这些是您在实际图像中的漏洞。

    【讨论】:

    • 感谢您的回答。但是她的问题是我没有没有间隙的图像模板。实际上,您所说的模板是我想在进行孔检测之前从图像中获取的模板。
    • 检查更新的答案,看看我是否触及了正确的理由!
    • 第1点:如果你只是翻转颜色,你根本没有改善情况,因为孔和背景仍然是相同的颜色。
    猜你喜欢
    • 2015-04-02
    • 2013-11-12
    • 1970-01-01
    • 2011-12-19
    • 2018-10-12
    • 1970-01-01
    • 2015-05-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多