【问题标题】:Opencv cvHoughCircles-Parameters doubtsOpencv cvHoughCircles-参数疑惑
【发布时间】:2023-03-20 18:43:01
【问题描述】:

我对@9​​87654321@参数有些疑惑。我有一张包含一些圆圈的图片,我想数一数,但数出来的圆圈数有误。

所以我不知道如何选择一些函数的参数,例如:

dp,min_dist,param1,param2,min_radius, max_radius.

我不知道我在这个参数中使用了哪些数字。我该如何计算?

【问题讨论】:

    标签: opencv


    【解决方案1】:

    选择参数取决于您使用的图像。参数本身的解释可以在参考这里找到

    http://opencv.willowgarage.com/documentation/cpp/imgproc_feature_detection.html#cv-houghcircles

    使用带有以下参数的函数

    HoughCircles(gray, circles, CV_HOUGH_GRADIENT,2, gray->rows/4, 200, 100, 10, 50);
    

    将使其搜索 dp 为 2 的圆圈,圆圈之间的最小距离为图像的 1/4,累加器值最大为 200,100,确定接受什么作为圆圈。 10 和 50 是圆圈接受的最小和最大半径。

    如果您无法找到这些参数,请尝试制作一个将这些值附加到滑块的测试程序,以便您可以在测试图像上看到结果。

    尤其是 param2 是很难通过测量来确定的。因为您知道图像中有多少个圆圈,所以您可以通过以下方式进行参数抓取:

    for(int i=0;i<200;i++) {
     cv::HoughCircles(gray, circles, CV_HOUGH_GRADIENT,2, gray->rows/4, 200, i, 10, 50);
     std::cout<<"HoughCircles with param2="<<i<<" gives "<<circles.size()<<" circles"<<endl;
    }
    

    我不知道 param1 和 2 是如何精确相关的,但您可以使用双 for 循环来找到最佳值。其他值需要从图片中测量。除了制作屏幕截图,您还可以使用以下功能保存此图像:

    cvSaveImage("image.jpg",gray);
    

    以确保您真正测量的是准确的图片。

    【讨论】:

    • 非常感谢您的帮助!!我已经输入了你的参数,但圈数给了我错误的结果。我的图像有 8 个圆圈,它们以这种方式定位:两条平行线 o o o o 。我如何测量这个参数像素,厘米 ..我从网络摄像头捕捉到我的图像,这个网络摄像头是固定的。谢谢
    • 我的参数基于一个 openCV 示例,因此确实可能不适用于您的情况。您可以尝试从网络摄像头保存快照图像,然后使用 Illustrator 等程序测量圆圈的尺寸,或在 MS Paint 中计算像素。您可以发布示例图片的链接吗?
    • 嗨,Thomas!非常感谢您的提示!!我是图像处理方面的新手。现在我知道如何计算半径我想如果我想知道我会做同样的事情圆圈之间的距离,我用像素测量,不是吗?所以现在我需要知道 param1 和 param2 如何计算两者。我想为您发送我的照片,但我不知道如何使用此帖子发送图片。再次感谢大家。
    • 是的,您确实必须自己测量像素。圆圈之间的距离也应该易于测量。 param1 和 param2 更难确定。如果您想发布图片链接,您可以使用 imageshack.us 或类似的服务并在此处发布链接。
    • 下面这个问题还特别提到了如何找到param2:stackoverflow.com/questions/9860667/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-02
    • 2019-10-03
    • 2015-08-20
    • 2016-11-26
    • 2017-02-16
    • 2013-09-06
    • 1970-01-01
    相关资源
    最近更新 更多