4

OpenCV で XCode (OS X Mountain Lion) を使用しています。OpenCV は自作 (バージョン 2.4.6.1) を介してインストールされます。

私のプログラムはカメラにアクセスするだけです。

これが私のコードソファーです:

using namespace cv;

int main(int argc, const char * argv[])
{
    Mat frame;
    VideoCapture cap(CV_CAP_ANY);
    if (!cap.isOpened())
    {
        std::cerr << "Webcam error. Was not able to open webcam!\n";
        exit(1);
    }

    namedWindow("webcam", CV_WINDOW_AUTOSIZE);

    while (cap.isOpened())
    {
        cap >> frame;
        if (frame.empty())
        {
            std::cerr << "Frame data error.\n";
        }

    imshow("webcam", frame);

    if(waitKey(50) >= 0)
    {
        cap.release();
        std::cout << "Webcam closed.\n";
    }
}

std::cout << "The Program has finished.";
return 0;
}

しかし、私は出力を得ています:

フレーム データ エラー。

OpenCV エラー: imshow でアサーションが失敗しました (size.width>0 && size.height>0)、ファイル /tmp/default-mebu/opencv-2.4.6.1/modules/highgui/src/window.cpp、261 行目

libc++abi.dylib: 例外をスローして呼び出された終了 (lldb)

私のプログラムがカメラに正しくアクセスしていないと思います。どういうわけかデータを取得できません。

Linux にいくつかの問題があったことは知っていますが、それらは修正されたと思いますが、それらが OS X にどのように影響したかはわかりません。

私の問題の解決策を知っている人はいますか?

編集:

だから私は解決策を見つけました。imshow に try {} catch {} を追加しました。現在、私のプログラムは imshow にヒットしても終了しません。代わりに、エラーを処理して while ループを実行し続けます。いくつかのフレームが欠落していますが、良好なビデオストリームを維持するのに十分です。

try
{
     imshow("webcam", frame);
}
catch (Exception& e)
{
    const char* err_msg = e.what();
    std::cout << "exception caught: imshow:\n" << err_msg << std::endl;
}

スローされるエラーは同じです。

フレームデータエラー。

OpenCV エラー: imshow でアサーションが失敗しました (size.width>0 && size.height>0)、ファイル /tmp/default-mebu/opencv-2.4.6.1/modules/highgui/src/window.cpp、261 行目

キャッチされた例外: imshow: /tmp/default-mebu/opencv-2.4.6.1/modules/highgui/src/window.cpp:261: エラー: (-215) size.width>0 && size.height>0 in function imshow

4

3 に答える 3

0
VideoCapture cap(CV_CAP_ANY);
Sleep(1000);  // Wait for response of camera, don't forget to #include <windows.h>
于 2013-10-31T09:40:33.953 に答える
0

同様の問題がありました。同様のこのコードを追加して、おそらく解決してください。キャプチャサイズがこの問題を引き起こすため

VideoCapture cap;
cap.set(CV_CAP_PROP_FRAME_WIDTH, 640);
cap.set(CV_CAP_PROP_FRAME_HEIGHT, 480); 

それから

cap.read(image);
于 2013-11-09T09:10:56.740 に答える