跟踪误差分析中的实际位置计算.docx
- 文档编号:17989493
- 上传时间:2023-08-05
- 格式:DOCX
- 页数:11
- 大小:15.79KB
跟踪误差分析中的实际位置计算.docx
《跟踪误差分析中的实际位置计算.docx》由会员分享,可在线阅读,更多相关《跟踪误差分析中的实际位置计算.docx(11页珍藏版)》请在冰点文库上搜索。
跟踪误差分析中的实际位置计算
跟踪误差分析中的实际位置计算
在做目标跟踪的仿真实验时,为了定量分析算法的跟踪准确性。
我们需要分析目标跟踪结果的质心坐标和目标实际质心坐标的误差绝对值。
目标的跟踪结果质心坐标可是使用椭圆标识框的中心代替。
那么实际质心坐标怎么得到呢?
立体标定?
算了,没有实际的摄像机。
还是用“人工手动逐帧标定”吧。
(其实是很笨的方法,得一帧一帧的弄。
)
步骤如下:
用矩形框选定跟踪物体,计算质心,输出质心坐标到文件。
执行时就是不断地:
选择物体->Enter->选择物体->Enter……
程序如下:
#include
"cv.h"
#include
"highgui.h"
#include
<stdio.h>
#include
<ctype.h>
#include
"iostream.h"
#include
"fstream.h"
IplImage
*image=0;
IplImage*
gray=0;
IplImage*
bi=0;
int
select_object=0;
CvPoint
origin;
CvRect
selection;
ofstream
fout("real_position.txt");
void
on_mouse(intevent,intx,inty,intflags,void*param
)
{
if(!
image)
return;
if(image->origin)//origin=1,底左结构
y=image->height-y;//
换成顶左
if(select_object)//如果处于选择跟踪物体阶段,则对selection用当前的鼠标位置进行设置
{
selection.x=MIN(x,origin.x);
selection.y=MIN(y,origin.y);
selection.width=selection.x+CV_IABS(x-origin.x);
selection.height=selection.y+CV_IABS(y-origin.y);
selection.x=MAX(selection.x,0);
selection.y=MAX(selection.y,0);
selection.width=MIN(selection.width,image->width
);
selection.height=MIN(selection.height,
image->height);
selection.width-=selection.x;
selection.height-=selection.y;
}
cvRectangle(image,cvPoint(selection.x,selection.y),
cvPoint(selection.x+selection.width,selection.y+selection.height),
CV_RGB(255,0,0),1,8,0);
cvShowImage("Demo",image);
switch(event)
{
caseCV_EVENT_LBUTTONDOWN:
origin=cvPoint(x,y);
selection=cvRect(x,y,0,0);
select_object=1;
break;
caseCV_EVENT_LBUTTONUP:
select_object=0;
#ifdef
_DEBUG
printf("\n#
鼠标的选择区域:
");
printf("\nX=
%d,Y=%d,Width=%d,Height=%d\n",
selection.x,selection.y,selection.width,
selection.height);
gray=cvCreateImage(cvGetSize(image),IPL_DEPTH_8U,1);
bi=cvCreateImage(cvGetSize(image),IPL_DEPTH_8U,1);
cvCvtColor(image,gray,CV_RGB2GRAY);
cvThreshold(gray,bi,60,255,CV_THRESH_BINARY);
//
目标质心的计算:
doubleM00=0,x0=0,y0=0;
CvPoint2D
32fcenter;
CvMomentsm;
CvMatmat;
cvMoments(cvGetSubRect(bi,&mat,selection),&m,1);
M00=cvGetSpatialMoment(&m,0,0);
x0=
cvGetSpatialMoment(&m,1,0)/M00;//质心
y0=cvGetSpatialMoment(&m,0,1)/M00;
center.x=x0;
center.y=y0;
fout<<"center_x="<<center.x+selection.x<<"
"<<"center_y="<<center.y+selection.y<<endl;
#endif
break;
}
}
intmain(
intargc,char**argv)
{
CvCapture*capture=0;
IplImage*frame=0;
intn=0;
intc=0;
char*file_name="..\\video5.avi";
capture=cvCaptureFromAVI(file_name);
if(!
capture)
{
fprintf(stderr,"Could
notinitializecapturing...\n");
return-1;
}
cvNamedWindow("Demo",1);
cvSetMouseCallback("Demo",on_mouse,NULL);//on_mouse
自定义事件
for(;;)
{
frame=cvQueryFrame(capture);
n++;
if(!
frame)break;
if(!
image)
{
image=cvCreateImage(cvGetSize(frame),8,3);
image->origin=
frame->origin;
}
cvCopy(frame,image,0);
CvFontfont;
cvInitFont(&font,CV_FONT_VECTOR0,0.5,0.5,0,1.5,8);
chartext[1024];
sprintf(text,"%dframe",n);
cvPutText(image,text,cvPoint(20,20),&font,CV_RGB(255,0,0));
cvShowImage("Demo",image);
cvWaitKey(0);
if(c==27)//quittheprogram:
27=='esc'
break;//
exitfromfor-loop
}
cvWaitKey(0);
cvReleaseCapture(&capture);
cvDestroyWindow("CamShiftDemo");
return0;
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 跟踪 误差 分析 中的 实际 位置 计算
![提示](https://static.bingdoc.com/images/bang_tan.gif)