【问题标题】:circle-detection issue圆圈检测问题
【发布时间】:2018-08-26 19:38:30
【问题描述】:

1.一些信息:我想在openCV的帮助下开发一种圆圈识别。我成功建立了 Swiftobjc-c++ 之间的连接,但奇怪的是我的圆圈识别算法出现了一些问题:不是我图像中的所有圆圈被检测到!


2.看看我的代码:

+(UIImage *)ConvertImage:(UIImage *)image {
    cv::Mat matImage;
    UIImageToMat(image, matImage);

    cv::Mat modImage;
    cv::medianBlur(matImage, matImage, 5);
    cv::cvtColor(matImage, modImage, CV_RGB2GRAY);

    cv::GaussianBlur(modImage, modImage, cv::Size(9, 9), 2, 2);

    vector<Vec3f> circles;
    cv::HoughCircles(modImage, circles, CV_HOUGH_GRADIENT, 1, 1, 100, 50, 0, 0);
    for (auto i = circles.begin(); i != circles.end(); ++i)
        std::cout << *i << ' ';

    for( size_t i = 0; i < circles.size(); i++ )
    {
        cv::Point center(cvRound(circles[i][0]), cvRound(circles[i][1]));
        int radius = cvRound(circles[i][2]);
        circle( matImage, center, 3, Scalar(0,255,0), -1, 8, 0 );
        circle( matImage, center, radius, Scalar(0,0,255), 3, 8, 0 );
    }

    UIImage *binImg = MatToUIImage(matImage);
    return binImg;
}

正如您在图像 [click] 中看到的那样,出现了这个问题: 仅检测到 7 个圈子中的 3 个!


所以在docs我找到了这一行的参数说明:

cv::HoughCircles(modImage, circles, CV_HOUGH_GRADIENT, 1, 1, 100, 50, 0, 0);
  • dp = 1:分辨率的反比。
  • min_dist = modImage.rows/8:检测到的中心之间的最小距离。
  • param_1 = 200:内部 Canny 边缘检测器的上限阈值。
  • param_2 = 100*:中心检测阈值。
  • min_radius = 0:要检测的最小无线电。如果未知,则将零设为默认值。
  • max_radius = 0:要检测的最大半径。如果未知,则将零设为默认值。

3.我的问题

如何摆脱上述问题?

任何帮助将不胜感激:)

【问题讨论】:

    标签: c++ algorithm opencv geometry objective-c++


    【解决方案1】:

    对于第 2 期:轮廓应该是彩色的,而不是白色的! 应该是什么颜色?无论如何,你用这条线在你的代码中画出那个圆圈。

        circle( matImage, center, radius, Scalar(0,0,255), 3, 8, 0 );
    

    如果你想改变颜色,你可以改变你在 Scalar(0,0,255) 中声明的值。

    如果你根本不想要那个圆圈,你可以删除那行代码。

    【讨论】:

      【解决方案2】:

      您的图像似乎没有噪点。如果图像始终包含圆形,您可以使用最小二乘法提取轮廓并拟合圆形

      你可以得到圆拟合方程here。这是一个简单的实现。为圆的参数(圆心和半径)创建一个结构体,拟合圆并将参数存储在结构体中,并使用它使用 OpenCV 绘制圆。

      您还可以使用“ellipse2poly”函数在圆上生成点。

      【讨论】:

        猜你喜欢
        • 2018-10-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-11
        • 1970-01-01
        • 2021-03-08
        相关资源
        最近更新 更多