【发布时间】:2011-10-01 19:13:11
【问题描述】:
我正在尝试检测圆圈,但我正在检测甚至不存在的圆圈。我的代码如下。谁知道如何修改 DetectCircle() 方法以使检测更准确,谢谢
void detectCircle( IplImage * img )
{
int edge_thresh = 1;
IplImage *gray = cvCreateImage( cvSize(img->width,img->height), 8, 1);
IplImage *edge = cvCreateImage( cvSize(img->width,img->height), 8, 1);
cvCvtColor(img, gray, CV_BGR2GRAY);
gray->origin = 1;
// color threshold
cvThreshold(gray,gray,100,255,CV_THRESH_BINARY);
// smooths out image
cvSmooth(gray, gray, CV_GAUSSIAN, 11, 11);
// get edges
cvCanny(gray, edge, (float)edge_thresh, (float)edge_thresh*3, 5);
// detects circle
CvSeq* circle = cvHoughCircles(edge, cstorage, CV_HOUGH_GRADIENT, 1,
edge->height/50, 5, 35);
// draws circle and its centerpoint
float* p = (float*)cvGetSeqElem( circle, 0 );
if( p==null ){ return;}
cvCircle( img, cvPoint(cvRound(p[0]),cvRound(p[1])), 3, CV_RGB(255,0,0), -1, 8, 0 );
cvCircle( img, cvPoint(cvRound(p[0]),cvRound(p[1])), cvRound(p[2]), CV_RGB(200,0,0), 1, 8, 0 );
cvShowImage ("Snooker", img );
}
【问题讨论】:
-
以后不使用
edge结果为什么还要调用cvCanny? -
是的,这是一个错误。是否已更改但仍会随机检测到圆圈
-
平滑后尝试另一个阈值为 127。
-
如果您想要的不仅仅是在黑暗中摸索,您应该发布示例图像、中间步骤的图像(平滑、精巧)以及您获得和期望的输出。
-
另一个阈值 127 会做什么?
标签: random opencv computer-vision detection geometry