web-dev-qa-db-ja.com

アサーションに失敗しました(size.width> 0 && size.height> 0)

OpenCV _2.4.7_でVisual Studio Express 2013を使用しています。これは tutorial の後に続きます。

関連するすべてのSOの質問を含む。

  • _VideoCapture::open_の戻り値は1

  • waitKey()遅延を50ミリ秒以降500ミリ秒に延長

  • ウィンドウの寸法を設定する

  • visual C++で別のプロジェクトを作成する

  • カメラから読み取るのではなく、既存の画像を開く(同じエラー)

しかし、運がない、助けてください!

これが私のコードです:

_#include <opencv/cv.h>
#include <opencv/highgui.h>
#include <iostream>

using namespace std;
using namespace cv;

int main() {
    Mat image;

    VideoCapture cap;
    int camOpen = cap.open(CV_CAP_ANY);

    namedWindow("window", CV_WINDOW_AUTOSIZE);

    while (true) {
        cap >> image;

        imshow("window", image);

    // delay 33ms
    waitKey(33);        
    }

}
_

コンパイルして実行すると、次のエラーが発生しました。

OpenCVエラー:cv :: imshow、ファイル........\opencv\modules\highgui\src\window.cpp、行261でアサーションに失敗しました(size.width> 0 && size.height> 0)

imshow("window", image);でエラーが発生します。コメントアウトしたとき、苦情はありません。


更新:

このエラーが発生した理由のもっともらしい説明は、私のウェブカメラが起動するのに時間がかかることです。これが最初にimage.empty()がtrueであるため、プログラムを終了するためにabort()関数が呼び出されました。

コードで

_if (!image.empty()) {
    imshow("window", image);
}
_

カメラが起動するのを待つことができます

18
jytoronto

私はあなたのコードを試しましたが、私にとってはそれが動作します(現在のウェブカメラ入力を視覚化します)!
OpenCV 2.4.7を搭載したVisual Studio 2012 Ultimateで実行しました。
...
画像が空なのでエラーが発生しますので、これを試してください:

while (true) {
    cap >> image;

    if(!image.empty()){
        imshow("window", image);
    }

// delay 33ms
waitKey(33);        
}

ウェブカメラから最初に受け取る画像が空である可能性があります。この場合、imshowはエラーをスローしません。したがって、次の入力画像が空ではないことを願っています。

16
Dennis

これを行う:

VideoCapture cap;
cap.set(CV_CAP_PROP_FRAME_WIDTH, 640);
cap.set(CV_CAP_PROP_FRAME_HEIGHT, 480);
int camOpen = cap.open(CV_CAP_ANY);

または、これを変更してみてください:

while (true) {
        cap >> image;

        imshow("window", image);

    // delay 33ms
    waitKey(33);        
    }

try
{
     cap >> image;
     imshow("window", image);
     waitKey(33); 
}
catch (Exception& e)
{
    const char* err_msg = e.what();
    std::cout << "exception caught: imshow:\n" << err_msg << std::endl;
}
0
int i=0;

while(i<4)

{

VideoCapture cap(0); // force camera to open 4 tiMEs

i++;

}

waitKey(5000); 
VideoCapture cap(0);
int camOpen = cap.open(CV_CAP_ANY);

namedWindow("window", CV_WINDOW_AUTOSIZE);

while (true) {
    cap >> image;

    imshow("window", image);
waitKey(33);        
}

これを行うと、確実に動作します。