오늘 C에서 OpenCV를 사용하여 Hough Transform을 사용하여 원을 검출하는 프로그램을 작성했습니다. 프로그램은 3 개의 이미지를 입력하고 각 이미지에는 고정 된 작은 원이 들어 있으며 가변 위치의 큰 원. 그러면 프로그램에서 두 원을 모두 인식하고 두 원의 중심을 표시합니다. 이제 출력 이미지에서 더 큰 원 중심의 (x, y) 좌표가 고정 된 작은 원의 중심을 기준으로 표시되어야합니다. 다음은 여기에 입력 및 출력 이미지입니다 'circle.cpp'OpenCV를 사용하여 이미지의 다른 점을 좌표를 찾는 방법
#include <cv.h>
#include <highgui.h>
#include <math.h>
int main(int argc, char** argv)
{
IplImage* img;
int n=3;
char input[21],output[21];
for(int l=1;l<=n;l++)
{
sprintf(input,"Frame%d.jpg",l); // Inputs Images
if( (img=cvLoadImage(input))!= 0)
{
IplImage* gray = cvCreateImage(cvGetSize(img), IPL_DEPTH_8U, 1);
IplImage* canny=cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,1);
IplImage* rgbcanny=cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,3);
CvMemStorage* storage = cvCreateMemStorage(0);
cvCvtColor(img, gray, CV_BGR2GRAY);
cvSmooth(gray, gray, CV_GAUSSIAN, 9, 9); // smooth it, otherwise a lot of false circles may be detected
cvCanny(gray,canny,50,100,3);
CvSeq* circles = cvHoughCircles(canny, storage, CV_HOUGH_GRADIENT, 2, gray->height/4, 200, 100);
int i;
cvCvtColor(canny,rgbcanny,CV_GRAY2BGR);
for(i = 0; i < circles->total; i++)
{
float* p = (float*)cvGetSeqElem(circles, i);
cvCircle(rgbcanny, cvPoint(cvRound(p[0]),cvRound(p[1])), 3, CV_RGB(0,255,0), -1, 8, 0);
cvCircle(rgbcanny, cvPoint(cvRound(p[0]),cvRound(p[1])), cvRound(p[2]), CV_RGB(255,0,0), 3, 8, 0);
}
cvNamedWindow("circles", 1);
cvShowImage("circles", rgbcanny);
//Displays Output images
sprintf(output,"circle%d.jpg",l);
cvSaveImage(output,rgbcanny);
cvWaitKey(0);
}
}
return 0;
}
에 대한 코드는 그리고 :
I가 코드에서 변경할 사항 제안하십시오 원하는 (x, y) 좌표를 표시하십시오. 고맙습니다 :)
당신이하고 싶은 것이 명확하지 않습니다. 큰 원 중심의 X, Y 좌표를 표시 하시겠습니까? 그게 다야? – karlphillip
예, 큰 원 w.r.t의 중심 좌표 (x, y)를 표시하고 싶습니다. 출력 이미지에서 원점 (0,0)으로 취한 작은 원의 중심 – silentassasin