OpenCV + WebCam导致崩溃(写入期间内存访问违规)

时间:2013-02-10 18:49:35

标签: c++ opencv camera

最近安装的OpenCV 2.4.3尝试做一些视频捕获和对象区分。但遗憾的是,每次通过网络摄像头捕获视频的行为都会导致内存访问违规。

我正在使用Visual Studio 2010(Win 7 x86)和网络摄像头“A4 Tech USB2.0”。首先我认为可能问题在于相机本身,但后来我尝试使用videoInput.h lib来获取相机的任何响应,但仍然没有结果。 (其他应用程序,如Skype看到它(并使其工作)没问题)。

这是一个代码(几乎是本书):

    <pre>
    #include "cv.h"
    #include "highgui.h"
    #include "stdlib.h"
    #include "stdio.h"

    int main(int argc, char* argv[])
    {
    CvCapture* capture = cvCreateCameraCapture(CV_CAP_ANY); //cvCaptureFromCAM( 0 );
    assert( capture );

    double width = cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_WIDTH);
    double height = cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_HEIGHT);
    printf("[i] %.0f x %.0f\n", width, height );

    IplImage* frame=0;

    cvNamedWindow("capture", CV_WINDOW_AUTOSIZE);

    printf("[i] press Esc for quit!\n\n");

    if(capture != NULL)
    {
      while(true)
     {
       frame = cvQueryFrame( capture ); //it crashes here all the time

        cvShowImage("capture", frame);

       char c = cvWaitKey(35);
       if (c == 27) 
       { 
        break;
       }
      }
     }

     cvReleaseCapture( &capture );
     cvDestroyWindow("capture");
     return 0;
     }
</pre>

使用相同的问题阅读其他主题并尝试解决一些问题: (在捕获cvWaitKey(35)之间添加间隔, 添加检查捕获设备是否真的存在if (capture != NULL) 但仍然无法理解为什么会这种情况继续发生。

更新:我最终得到的是控制台,它生成了OpenCVwindow和窗口本身的属性(看起来是灰色背景)。和内存访问冲突错误。

1 个答案:

答案 0 :(得分:1)

经过一番思考和测试,找到了决议。

看来,DirectShow上的DirectVobSub过滤器以某种方式阻止我访问我的相机程序(通过OpenCV和VideoInput库)。每次我运行程序并访问我的相机时,它都会创建一个新的实例,这会导致访问内存违规。从我的PC上卸载后,代码开始工作。