cvNorm () всегда возвращает 0 при сравнении кадров веб-камеры - PullRequest
0 голосов
/ 06 февраля 2012

Я пытаюсь написать программу, которая распечатывает норму между двумя кадрами (с интервалом 30 кадров), снятыми с веб-камеры, но cvNorm всегда возвращает 0. Что я делаю неправильно? Код следует:

int main( int argc, char **argv )
{
CvCapture *capture = 0;
IplImage  *frame = 0;
int       key = 0;

/* initialize camera */ 
capture = cvCaptureFromCAM( 0 );

/* always check */
if ( !capture ) {
    fprintf( stderr, "Cannot open initialize webcam!\n" );
    return 1;
}


/* create a window for the video */
cvNamedWindow( "result", CV_WINDOW_AUTOSIZE );

IplImage *image;
IplImage pastImage;

for(int i = 0; key != 'q'; i++ ) {
    image = cvQueryFrame(capture);  

Вот где происходит проверка:

if(!(i %30)){
        if(i){
            cout<<cvNorm(&pastImage,image)<<endl;
        }
        memcpy(&pastImage,image, sizeof(IplImage));
    }


    frame = image;              

    /* always check */
    if( !frame ) break;

    /* display current frame */ 
    cvShowImage( "result", frame );
    /* exit if user press 'q' */
    key = cvWaitKey( 1 );
}

/* free memory */
cvDestroyWindow( "result" );
cvReleaseCapture( &capture );

return 0;
}

1 Ответ

1 голос
/ 06 февраля 2012

memcpy'ing объект изображения не копирует изображение.Копирует метаданные изображения.Метаданные указывают на фактические пиксели изображения.В OpenCV должна быть функция копирования изображений.Назови это.

Вот учебник по теме: http://nashruddin.com/opencv-examples-for-operation-on-images.html/4

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...