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
谢谢!这是问题 – jzepeda 2012-02-06 20:04:16
链接不起作用。它相当于加载一些随机页面来清理操作系统。 – 2016-02-10 09:28:37