如下代码,霍夫变换检测到圆并用cvcircle画出圆后,怎么输出圆心坐标?希望写出具体c++代码

图片说明
才学c++和opencv,真心求教!

5个回答

line[1], 表示什么呢?

#include
#include
#include
using namespace std;
int main()
{
IplImage* src = NULL;
IplImage* dst = NULL;
IplImage* color = NULL;

src = cvLoadImage ("d:\image12.bmp", 1);
dst = cvCreateImage (cvGetSize(src), IPL_DEPTH_8U, 1);
if (src->nChannels == 1)
{
dst = cvCloneImage (src);
}
else
{
cvCvtColor (src, dst, CV_RGB2GRAY);
}

CvMemStorage* storage = cvCreateMemStorage (0);
cvSmooth (dst, dst, CV_GAUSSIAN, 5, 5);

CvSeq* circles = cvHoughCircles (dst, storage, CV_HOUGH_GRADIENT, 2, dst->width / 3, 300, 100, 0, 200);
color = cvCreateImage (cvGetSize(src), IPL_DEPTH_8U, 3);
cvCvtColor (dst, color, CV_GRAY2RGB);
for (int i = 0; i < circles->total; i++)
{
float* p = (float*)cvGetSeqElem (circles, i);
CvPoint pt = cvPoint (cvRound(p[0]), cvRound(p[1]));
cvCircle (color, pt, cvRound(p[2]), CV_RGB(255, 0, 0), 3, 8, 0);

cvLine( color, pt, line[1], CV_RGB(255,0,0), 3, 8 );//draw Radius
//cvCircle (color, pt, , CV_RGB(255, 0, 0), 3, 4, 0);//draw Circle center
cout<<"圆心坐标x= "<<cvRound(p[0])<<endl<<"圆心坐标y= "<<cvRound(p[1])<<endl;
cout<<"半径="<<cvRound(p[2])<<endl;
}

cvNamedWindow ("src", 1);
cvShowImage ("src", src);
cvNamedWindow ("circle", 1);
cvShowImage ("circle", color);

cvWaitKey (0);

cvReleaseMemStorage (&storage);
cvReleaseImage (&src);
cvReleaseImage (&dst);
cvReleaseImage (&color);

return 0;}

xujiayuan1992
xujiayuan1992 我只想输出圆心坐标,应该没必要这么多语句吧?我知道(*itc)[0],(*itc)[1]就是圆心坐标,可是不知道怎么写输出语句
接近 6 年之前 回复
 (*itc)[0],(*itc)[1]

这个就是圆心坐标啊。

xujiayuan1992
xujiayuan1992 我知道这个是圆心坐标,但是cout<<(*itc)[0]<<endl;会报错,你能写出具体输出坐标的语句吗?c++刚学不太会
接近 6 年之前 回复

(*itc)[0],(*itc)[1]是point类型的,肯定不能直接cout啊,point。x point。y才能直接输出嘛

cout<<"圆心坐标x= "<<cvRound(p[0])<<endl<<"圆心坐标y= "<<cvRound(p[1])<<endl;
cout<<"半径="<<cvRound(p[2])<<endl; 这就是圆心输出语句啊

qq_44724489
星星甲壳虫 请问我用这个方法检测了圆,但是发现有的图片输出一个圆,有的图片输出两个圆,我是用同一个代码实现的(没有修改过任何的数字)
一年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐