Opencv霍夫变换圆检测实战之检测硬币(C++)

HoughCircles 函数可以利用霍夫变换算法检测出灰度图中的圆。不需要源图像是二值的,只用将原图转化为灰度图即可。

void HoughCircles(InputArray image, OutputArray circles, int method, double dp, double minDist, double param1 = 100, double param2 = 100, int minRadius = 0, int maxRadius = 0);

  • image,输入图像,即源图像,需要为 8 位的灰度单通道图像。
  • circles,调用 HoughCircles 函数后此参数存储了检测到的圆的输出矢量,每个矢量由包含了 3 个元素的浮点矢量(x,y,radius)表示。
  • method,使用的检测方法,目前 OpenCV 中就霍夫梯度法一种可以使用,标识符为 HOUGH_GRADIENT。
  • dp,累加面分辨率(大小) = 原始图像分辨率(大小) × 1/dp。默认 dp = 1 时,两者分辨率相同。
  • minDist,两个圆心之间的最小距离。若两圆心距离 < minDist,则认为是同一个圆。
  • param1,Canny 边缘检测的高阈值,低阈值被自动置为高阈值的一半,默认为 100。
  • param2,累加平面某点是否是圆心的判定阈值。它越大,能通过检测的圆就更接近完美的圆形,默认为 100。
  • minRadius,圆半径的最小值。默认为 0。
  • maxRadius,圆半径的最大值,默认为 0。

此函数可以很容易地检测出圆心,但是可能找不到合适地圆半径。我们可以通过 minRadius 和 maxRadius 两个参数指定最大和最小圆半径,来辅助圆检测的结果。或者可以直接忽略返回半径,让二者均为默认值,只用 HoughCircles 函数检测出圆心,用额外步骤进一步确定半径。

其代码如下图所示:

#include
#include
#include

using namespace std;
using namespace cv;

int main(int argc, char** argv) {
    char input_win[] = "input image";
    Mat src = imread("C:/opencv/data/coins.jpg");
    if (src.empty()) {
        printf("could not load image...\n");
        return -1;
    }
    namedWindow(input_win, CV_WINDOW_AUTOSIZE);
    imshow(input_win, src);

    // convert to gray
    Mat grayImg;
    cvtColor(src, grayImg, CV_BGR2GRAY);
    vectorcircles;
    int hough_value = 80;
    HoughCircles(grayImg, circles, HOUGH_GRADIENT, 1, 10, 110, hough_value, 10, 100);
    Mat houghcircle = src.clone();
    for (int i = 0; i < circles.size(); i++) {
        circle(houghcircle, Point(circles[i][0], circles[i][1]), circles[i][2], Scalar(0, 0, 255), 2);
    }
    imwrite("houghcircle.jpg", houghcircle);
    imshow("houghcircle", houghcircle);
    waitKey(0);
    return 0;
}

原图:

Opencv霍夫变换圆检测实战之检测硬币(C++)

通过霍夫变换检测圆之后的图片如下图所示:

Opencv霍夫变换圆检测实战之检测硬币(C++)

Original: https://blog.csdn.net/xuner1213/article/details/123694287
Author: runner000001
Title: Opencv霍夫变换圆检测实战之检测硬币(C++)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/702377/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球