获取图像中检测到的圆的中心/opencv/c++
Posted
技术标签:
【中文标题】获取图像中检测到的圆的中心/opencv/c++【英文标题】:get the center of the detected circle in an image / opencv / c++ 【发布时间】:2013-11-18 08:30:00 【问题描述】:我正在使用此代码来获取图像中检测到的圆心的坐标。
vector<Vec3f> circles;
cv::HoughCircles( t, circles, CV_HOUGH_GRADIENT, 1, t.rows/8, 200, 100, 0, 0 );
for( size_t i = 0; i < circles.size(); i++ )
Point center(cvRound(circles[i][0]), cvRound(circles[i][1]));
cout << "center" << center << endl;
int radius = cvRound(circles[i][2]);
// circle center
circle( t2, center, 3, 1 , -1, 8, 0 );
// circle outline
circle( t2, center, radius, 1 , 3, 8, 0 );
imshow( "circles", t2 );
我可以检测到圆圈,但没有得到任何中心点坐标的结果:(
提前致谢。
改版后:
我添加了这一行,但答案为零。
cout << "number of circles found: " << circles.size() << endl;
图片: 第一个是主圆,第二个是应用高斯滤波器和 HoughCircles 函数后的:
【问题讨论】:
【参考方案1】:如果我理解正确,您的代码会绘制圆圈,但
cout << "center" << center << endl;
行没有给出正确的输出。
这是因为cv::Point
不支持通过<<
直接输出。
尝试使用:
cout << "center" << center.x << ", " << center.y << endl;
如果问题是您找不到任何圈子,请确保正确选择了 min_radius
和 max_radius
。尝试从大范围的允许半径开始,然后尝试选择较小的范围,直到只得到所需的圆。
这个值可以对检测率产生巨大的影响。
【讨论】:
感谢您的积分。看来我还没有检测到圈子呢!我在我的代码中添加了一行以检查是否检测到某些东西..答案为零..请考虑编辑后的帖子。 如果您没有得到任何圆圈但没有错误,请尝试将最小/最大半径设置为其他值。查看我编辑的答案。 我尝试了不同的数字,但仍然没有结果!我应该通过反复试验找到正确的半径吗? 您可以在输入图像中粗略测量它。这些值在Pixel
中,因此您只需计算输入中的半径并添加 +/- 10% 即可获得最小和最大半径的值。
如果您在问题中添加图像也会有所帮助。也许霍夫是完成您的任务的完全错误的方式。以上是关于获取图像中检测到的圆的中心/opencv/c++的主要内容,如果未能解决你的问题,请参考以下文章