2013-02-10 98 views
0

最近安裝了OpenCV 2.4.3以嘗試進行一些視頻捕獲和對象區分。但令人遺憾的是,每次通過網絡攝像頭捕捉視頻的嘗試都會導致內存訪問違規。OpenCV + WebCam導致崩潰(寫入期間內存訪問衝突)

我使用Visual Studio 2010(Win 7 x86)和網絡攝像頭「A4 Tech USB2.0」。首先,我認爲也許問題是相機本身,但後來我試圖使用videoInput.h庫獲得任何來自相機的響應,仍然沒有結果。 (其他應用程序,如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和窗口本身(灰色背景似乎)的屬性。和內存訪問衝突錯誤。

+0

那些'**'代碼的一部分在 ** ** frame = cvQueryFrame(capture); **'? – lucasmrod 2013-02-10 18:58:16

+0

不,對不起,他們不是... – GreUJnik 2013-02-10 19:10:22

回答

1

經過一番思考和測試,找到了解決辦法。

看來,DirectShow上的DirectVobSub過濾器以某種方式阻止了我通過OpenCV和VideoInput庫(不論是通過OpenCV還是VideoInput庫)訪問我的相機。它每次運行我的程序並訪問我的相機時都會創建一個新的實例,導致訪問內存違例)。從PC上卸載後,代碼開始工作。