【问题标题】:Finding small circles in a image using Opencv c++ [duplicate]使用Opencv c ++在图像中查找小圆圈[重复]
【发布时间】:2020-12-24 06:53:09
【问题描述】:

下面是附加图片,我正在尝试检测大圆圈内的小圆圈,并获取它的x 和y 坐标。 到目前为止,我已经尝试使用 HoughCirclesfindContours,但我无法获得想要的结果。

谁能建议如何解决这个特殊问题。

已编辑: 这个算法我用过

    cv::Mat tmp_mat, grey_mat;
    cv::cvtColor(load_image, tmp_mat, cv::COLOR_BGR2GRAY);
    cv::GaussianBlur(tmp_mat,grey_mat,cv::Size(7,7),0,0);
    cv::imshow("color", grey_mat);

    // Step -2
    std::vector<std::vector<cv::Point> > contours;
    std::vector<cv::Vec4i > hierarchy;

    cv::Mat edged;
    cv::Canny(grey_mat, edged, 20,140);
    cv::findContours(edged, contours, hierarchy,cv::RETR_EXTERNAL, cv::CHAIN_APPROX_SIMPLE);
    std::cout << "Contour Size: " << contours.size();

经过精明的边缘检测后,我得到了这张图片

虽然代码正在检测大圆圈内的圆圈。问题是如何排除大圆圈之外的圆圈。

【问题讨论】:

  • 我建议先对图像设置阈值。然后尝试应用形态学打开然后用小圆形内核关闭以去除小的。如果形态学效果不佳,则获取轮廓并在区域或周长上进行过滤。您可以获得坐标的轮廓的质心。或者你可以做霍夫圆并得到圆的中心。

标签: python c++ opencv image-processing computer-vision


【解决方案1】:

您可以尝试使用Corner Harris detector。它将检测图像中的角落,即小圆圈。但是,它可能会为每个圆检测多个角,因此您可以尝试对结果进行一些过滤。

有一个在线演示,您可以立即尝试:demo

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-02
    • 1970-01-01
    • 1970-01-01
    • 2015-10-17
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 2020-06-24
    相关资源
    最近更新 更多