원을 감지하려고하지만 거기에없는 원을 감지하고 있습니다. 내 코드는 아래와 같습니다. 누구나임의의 원이 감지 됨
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' 부르죠 원 경계 내부의 픽셀을 의미합니까? – Niki
예, 실수였습니다. 변화가 있었지만 무작위로 원이 발견되었습니다. – user966890
부드럽게 한 후 다른 임계 값을 127로 시도하십시오. – Adrian