2012-02-06 1 views
0

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

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

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

+0

Спасибо! В этом была проблема – jzepeda

+0

ссылка не работает. Это скорее загружает некоторую случайную страницу для очистки ОС. –

Смежные вопросы