小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

跟蹤誤差分析中的實(shí)際位置計(jì)算

 mscdj 2014-07-17

 

    在做目標(biāo)跟蹤的仿真實(shí)驗(yàn)時(shí),為了定量分析算法的跟蹤準(zhǔn)確性。我們需要分析目標(biāo)跟蹤結(jié)果的質(zhì)心坐標(biāo)和目標(biāo)實(shí)際質(zhì)心坐標(biāo)的誤差絕對(duì)值。

 

    目標(biāo)的跟蹤結(jié)果質(zhì)心坐標(biāo)可是使用橢圓標(biāo)識(shí)框的中心代替。那么實(shí)際質(zhì)心坐標(biāo)怎么得到呢?立體標(biāo)定?算了,沒有實(shí)際的攝像機(jī)。

 

    還是用“人工手動(dòng)逐幀標(biāo)定”吧。(其實(shí)是很笨的方法,得一幀一幀的弄。)

 

    步驟如下:

    用矩形框選定跟蹤物體,計(jì)算質(zhì)心,輸出質(zhì)心坐標(biāo)到文件。

 

    執(zhí)行時(shí)就是不斷地:選擇物體->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( int event, int x, int y, int flags,void* param )

{

    if( !image )

        return;

 

    if( image->origin )//origin=1,底左結(jié)構(gòu)

        y = image->height - y;// 換成頂左

 

    if( select_object )//如果處于選擇跟蹤物體階段,則對(duì)selection用當(dāng)前的鼠標(biāo)位置進(jìn)行設(shè)置

    {

        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 )

    {

    case CV_EVENT_LBUTTONDOWN:

        origin = cvPoint(x,y);

        selection = cvRect(x,y,0,0);

        select_object = 1;

        break;

    case CV_EVENT_LBUTTONUP:

        select_object = 0;

 

#ifdef _DEBUG

    printf("\n # 鼠標(biāo)的選擇區(qū)域:");

    printf("\n   X = %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);

 

       // 目標(biāo)質(zhì)心的計(jì)算:

       double M00=0,x0=0,y0=0;

       CvPoint2D 32f center;

       CvMoments m;

       CvMat mat;

       cvMoments(cvGetSubRect(bi,&mat,selection),&m,1);

       M00 = cvGetSpatialMoment(&m,0,0);

       x0 = cvGetSpatialMoment(&m,1,0)/M00;//質(zhì)心

       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;

    }

}

 

 

int main( int argc, char** argv )

{

    CvCapture* capture = 0;

    IplImage* frame = 0;

    int n=0;

       int c=0;

    char* file_name="..\\video5.avi";

 

    capture = cvCaptureFromAVI( file_name );

    if( !capture )

    {

        fprintf(stderr,"Could not initialize capturing...\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 );

 

              CvFont font;

              cvInitFont(&font,CV_FONT_VECTOR0,0.5,0.5,0,1.5,8);

              char text[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 )//quit the program : 27=='esc'

            break;  // exit from for-loop      

       }

   

    cvWaitKey(0);

    cvReleaseCapture( &capture );

    cvDestroyWindow("CamShiftDemo");

 

    return 0;

}

 

 

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多