2

単純な問題についてよく検索しましたが、解決策が見つかりませんでした。コードを実行すると、黒いコンソールにカメラのフレーム サイズが表示されますが、ウィンドウにビデオが表示されず、灰色の画面が表示されます。しかし、HDDからビデオを再生すると、正常に動作します。誰か助けてください。これは私のコードです

  #include <iostream>

#include <cv.h>
#include <cxcore.h>
#include <highgui.h>

using namespace std;

int main(int argc, char** argv){

    CvCapture *capture;
    IplImage* img=0;
    cvNamedWindow("Window");
    capture = cvCreateCameraCapture( -1);
    //capture = cvCaptureFromAVI("1.mp4");
    //capture = cvCaptureFromCAM(-1);

    int ext=0;

    assert( capture );


    if(capture==NULL){
        cout<<"Cam Not Found!!!"<<endl;
        getchar();
        return -5;
    }
    while ( true ){

        img = cvQueryFrame( capture );

        cvSaveImage("1.jpg",img);

        if (!img){
            printf("Image not Found\n");
            break;
        }


        cvShowImage("Window", img);
        cvWaitKey(50);
    }
    cvReleaseImage(&img);
    cvDestroyWindow("Window");
    cvReleaseCapture(&capture);

    return 0;
}

私はopencv 2.2とVisual Studio 2010を使用しています

4

3 に答える 3

2

明らかに間違っていることが 1 つあります。呼び出しの順序を次のように変更する必要があります。

cvShowImage("Window", img);
cv::waitKey(20);

次に、次の成功を確認することが不可欠ですcvQueryFrame()

img = cvQueryFrame( capture );
if (!img)
{
    // print something
    break;
}

編集:

ところで、OpenCV の C インターフェイスと C++ インターフェイスを混在させていることに気付きました。そうしないでください!cv::waitKey(50);で置き換えcvWaitKey(50);ます。

デバッグ目的で、cvQueryFrame()成功した場合は を使用して 1 フレームをディスクに保存することをお勧めします。cvSaveImage()その画像に問題がない場合は、キャプチャ手順が実際には完全に機能しており、問題は別の場所にあることを意味します。

于 2012-07-13T12:10:01.410 に答える