0

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

我正在使用 Visual Studio 2010 (Win 7 x86) 和网络摄像头“A4 Tech USB2.0”。首先我认为问题可能出在相机本身,但后来我尝试使用videoInput.hlib 从相机获得任何响应,仍然没有结果。(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 和窗口本身的生成属性的控制台(看起来是灰色背景)。和内存访问冲突错误。

4

1 回答 1

1

经过一番思考和测试,找到了解决方案。

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

于 2013-02-13T14:39:14.607 回答