图像中的圆形检测

我试图使用HoughCircles方法从图像中检测圆形,但看起来这个方法无法检测到所有中心几乎相同的圆。例如,如果我有三个中心几乎相同的圆,它会检测为一个圆。请问有没有什么方法可以找到所有这些圆。以下是源图像:

请查看图像

我可能对HoughCircle方法的假设有误。

提前感谢。


回答:

原因是在调用HoughCircles时,您需要决定检测到的圆心之间的最小距离。您提到的相同中心意味着它们之间的距离为零。因此,在这种情况下,您应该将最小距离参数设置为接近0的值。

void cv::HoughCircles   (   InputArray  image,OutputArray     circles,int     method,double  dp,double  minDist, // 您应该将此参数设置为接近零的值,因为0不被接受。double  param1 = 100,double  param2 = 100,int     minRadius = 0,int     maxRadius = 0 )

当我使用以下参数尝试时:

  HoughCircles( input, output, CV_HOUGH_GRADIENT, 1, 0.5, 60, 30, 1, 200 );

我得到了以下结果:

输入图像描述

编辑:当我进一步尝试时,我检测到了12个圆,但实际有18个圆(不包括边缘圆)。原因可能是图像质量的问题。以下是我的代码和结果:

#include "opencv2/highgui/highgui.hpp"#include "opencv2/imgproc/imgproc.hpp"#include <iostream>#include <stdio.h>#include <stdlib.h>using namespace cv;using namespace std;int main(){    /// 加载源图像并转换为灰度    Mat src_gray,dst,src = imread("/ur/source/image/image.jpg", 1 );    imshow("源图像",src);    int i = 50;    bilateralFilter(src,dst,i,i*2,i/2);    imshow("输出",dst);    cvtColor( dst, src_gray, CV_BGR2GRAY );    vector<Vec3f> circles;    /// 应用霍夫变换以查找圆    HoughCircles( src_gray, circles, CV_HOUGH_GRADIENT, 1, 0.01, 80, 55, 0, 100 );    Mat zero_mask = Mat::zeros(src.rows,src.cols,CV_8UC3);    /// 绘制检测到的圆    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( zero_mask, center, 3, Scalar(0,255,0), -1, 8, 0 );        // 圆轮廓        circle( zero_mask, center, radius, Scalar(0,0,255), 1, 8, 0 );    }    cout<<circles.size()<<endl;    imshow("输出2",src_gray);    imshow("输出",zero_mask);    waitKey(0);    return(0);}

输出:

输入图像描述

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注