gpt4 book ai didi

image-processing - 如何使用 OpenCV 查找图像上一个点与另一个点的坐标

转载 作者:太空宇宙 更新时间:2023-11-03 22:16:14 26 4
gpt4 key购买 nike

今天我在 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;
}

这里是输入和输出图像:
enter image description here enter image description here enter image description here
enter image description here enter image description here enter image description here

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

最佳答案

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

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

-----> x
|
|
v
y

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

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

关于image-processing - 如何使用 OpenCV 查找图像上一个点与另一个点的坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5795921/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com