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