2012-02-06 40 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 2012-02-06 20:04:16

+0

鏈接不起作用。它相當於加載一些隨機頁面來清理操作系統。 – 2016-02-10 09:28:37