cvNorm()在比较摄像头帧时总是返回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; 
} 

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