1

今天我在C语言中使用OpenCV编写了一个使用霍夫变换检测圆圈的程序。程序输入3张图像,每张图像包含一个固定的小圆圈和一个可变位置的大圆圈。然后程序识别两个圆圈并标记两个圆圈的中心。现在我想做的是,在输出图像中,大圆中心的 (x,y) 坐标应该相对于固定的小圆的中心显示。这是'circle.cpp'的代码

#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;
}

这是输入和输出图像:
在此处输入图像描述 在此处输入图像描述 在此处输入图像描述
在此处输入图像描述 在此处输入图像描述 在此处输入图像描述

请建议我应该在代码中进行哪些更改以显示所需的 (x,y) 坐标。非常感谢 :)

4

1 回答 1

3

在显示图像之前,使用cvPutText添加所需的文本。这个函数的参数是不言自明的。字体应该使用cvInitFont初始化。

当你计算相对坐标时,记住在OpenCV中,坐标系是这样的

-----> x
|
|
v
y

以防万一您有兴趣在轴指向另一个方向的系统中显示相对坐标。

您应该检查 Hough 变换是否准确检测到两个圆圈。如果是这样,您需要的所有数据都在circles变量中。如果 (xa,ya) 是大圆的坐标, (xb,yb) 是小圆的坐标,则相对坐标为 (xa-xb,ya-yb)。

于 2011-04-27T14:49:34.117 回答