在不使用霍夫变换的情况下查找图像中的圆圈

Posted

技术标签:

【中文标题】在不使用霍夫变换的情况下查找图像中的圆圈【英文标题】:Find circles in image without using Hough transform 【发布时间】:2014-07-18 09:10:06 【问题描述】:

我想在下图中找到圆圈。我尝试使用 OpenCV 的 Hough circle detection,但没有给出正确的结果。

还有其他方法可以找到圈子吗?

这里是示例代码

vector<Vec3f> circles;
Mat src_gray,te; 
cvtColor(tImg, src_gray, CV_BGR2GRAY);
GaussianBlur(src_gray, src_gray, Size(9, 9), 2, 2);
Canny(src_gray, te, 40, 240, 3);
/// Apply the Hough Transform to find the circles 
HoughCircles(te, circles, CV_HOUGH_GRADIENT, 1, te.rows / 10, 120, 9, 5, 25); 

【问题讨论】:

我想霍夫圆变换没有找到任何圆,因为该图像中没有任何圆。他们不是真正的圈子,是他们。你可以试试霍夫椭圆,这里有一些代码,但我不知道它是否有好处:toyhouse.cc/profiles/blogs/…。或者,您可以调整图像大小,使这些圆圈看起来更像圆圈。 如果图像是从手机拍摄的,或者说任何低分辨率图片..结果是随机的,但如果它是在paint或msWord中生成的,那么它会正确检测。 您能 1. 发布您的代码,2. 发布有效的图片。手机图片可能很嘈杂,需要使用高斯滤波器,尽管上面的图片看起来并不嘈杂。 我已经调整了i.imgur.com/g1Rx9Xc.png的大小 这里是示例代码向量 circles;垫 src_gray,te; cvtColor(tImg, src_gray, CV_BGR2GRAY); GaussianBlur(src_gray, src_gray, Size(9, 9), 2, 2); Canny(src_gray, te, 40, 240, 3); /// 应用霍夫变换找到圆 HoughCircles(te, circles, CV_HOUGH_GRADIENT, 1, te.rows / 10, 120, 9, 5, 25); 【参考方案1】:

画轮廓, 1.找到轮廓的质心 2. 求出质心到每个轮廓像素的距离。 3.如果这个距离几乎相同,那么它将是一个圆圈。

See This link

【讨论】:

以上是关于在不使用霍夫变换的情况下查找图像中的圆圈的主要内容,如果未能解决你的问题,请参考以下文章

使用 OpenCV(基于霍夫变换或其他特征)编写鲁棒的(颜色和大小不变)圆检测

Python,OpenCV中的霍夫圆变换——cv2.HoughCircles()

圆形霍夫变换错过了圆圈

使用霍夫变换检测圆

霍夫变换霍夫线性变换

OpenCV中的霍夫线变换和霍夫圆变换