0

最近、OpenCV 2.4.3 をインストールして、ビデオのキャプチャとオブジェクトの区別を試みました。しかし残念なことに、Web カメラでビデオをキャプチャしようとすると、メモリ アクセス違反が発生します。

Visual Studio 2010 (Win 7 x86) と Web カメラ "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 ライブラリの両方を使用)。プログラムを実行してカメラにアクセスするたびに、それ自体の新しいインスタンスが作成され、アクセス メモリ違反が発生しました)。PC からアンインストールした後、コードが機能し始めました。

于 2013-02-13T14:39:14.607 に答える