c++ - 比较网络摄像头帧时,cvNorm() 总是返回 0

标签 c++ c opencv webcam

我正在尝试编写一个程序,打印出从网络摄像头捕获的两帧(相隔 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;
}

最佳答案

memcpy 图像对象不会复制图像。它复制图像元数据。元数据指向实际图像像素。 OpenCV中应该有图像复制功能。叫那个。

这是关于该主题的教程:http://nashruddin.com/opencv-examples-for-operation-on-images.html/4

关于c++ - 比较网络摄像头帧时,cvNorm() 总是返回 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9157777/

相关文章:

c++ - 无法在 64 位 mac 上为 Xcode 中的 C++ 项目构建 opencv 2.4

c++ - shared_ptr 的 vector ,从函数返回并修改它

c++ - 匿名结构作为返回类型

c++ - makefile:如何生成目标文件到上层目录

c - 如何打印结构数组?

c - 如何将数组分配给C中的结构

opencv - Haar Classifier 正像集澄清

C++ 模板继承

c - 在C程序中使用sed时出现"unknown escape sequence"警告

python - OpenCV-Python 密集 SIFT 设置