opencv中的Hough变换失败

opencv中的Hough变换失败,opencv,image-processing,Opencv,Image Processing,这是上面的一张照片。我正在使用opencv来处理它,我尝试使用Hough变换,但失败了。此外,我发现在Hough变换中设置相关参数非常困难 代码如下: #include <opencv2/opencv.hpp> using namespace cv; using namespace std; int main() { Mat srcImg = imread("srccenter.bmp"); Mat greyImg; cvtColor(srcImg, gr

这是上面的一张照片。我正在使用opencv来处理它,我尝试使用Hough变换,但失败了。此外,我发现在Hough变换中设置相关参数非常困难

代码如下:

#include <opencv2/opencv.hpp>

using namespace cv;
using namespace std;

int main()
{
    Mat srcImg = imread("srccenter.bmp");
    Mat greyImg;
    cvtColor(srcImg, greyImg, COLOR_BGR2GRAY);

    std::vector<cv::Vec3f> circles;

    /// Apply the Hough Transform to find the circles
    HoughCircles(greyImg, circles, CV_HOUGH_GRADIENT, 1, 10, 100, 20, 0,   0);

    /// Draw the circles detected
    for (size_t i = 0; i < circles.size(); i++)
    {
        Point center(cvRound(circles[i][0]), cvRound(circles[i][1]));
        int radius = cvRound(circles[i][2]);
        circle(srcImg, center, 3, Scalar(0, 255, 255), -1);
        circle(srcImg, center, radius, Scalar(0, 255, 0), 1);
    }

    namedWindow("srcImg", WINDOW_NORMAL);
    imshow("srcImg", srcImg);
    waitKey(0);
    return 0;
 }
#包括
使用名称空间cv;
使用名称空间std;
int main()
{
Mat srcImg=imread(“srccenter.bmp”);
Mat greyImg;
CVT颜色(srcImg,灰色,颜色为灰色);
std::向量圆;
///应用Hough变换查找圆
霍夫圆(灰度、圆、CV_-HOUGH_梯度、1、10、100、20、0、0);
///画出检测到的圆
对于(size_t i=0;i
但结果是我检测不到任何圆

我怎样才能发现内圈


您有什么好主意吗?

您需要将最小距离参数更改为零。此参数用于检测到的中心之间的最小距离。在你们的例子中,圆心很近。
另外,你必须改变Canny边缘检测器的参数PARAMY1。

你有没有考虑过谷歌“圆检测OpenCV”?来吧甚至有一个官方教程,我已经把我的代码,请看看为什么你的最小和最大半径为0?确保您了解参数的作用,并将半径限制在您期望的内圈范围内。主要是,我想检测图片中的所有圆,因此我没有设置限制雾半径。但即便如此,任何一个圆都被检测到了。现在的问题是我无法检测到任何一个圆,更不用说内圈了@你的建议很有用。正如你所说,我多次更改了相关参数,最终对这些参数有所了解。@zahra-rah