2017-05-08 13 views
2

私のcannyエッジサンプルに大きな問題があります。数日前には動作していましたが、最近私はなぜ私のウェブカメラを読み取るプログラムを使用すると動作しないのか分かりません。C++/CannyEdgeDetection.exeの動作が停止Codeblocks/OpenCVエラー:アサーションが失敗しました

Here's the problem

これは私のサンプルです:

using namespace cv; 
using namespace std; 



int main() 
{ 
    VideoCapture cap(0); // open the default camera 
    if(!cap.isOpened()) // check if we succeeded 
    return -1; 


    Mat edges; 
    namedWindow("edges",1); 
    for(;;) 
    { 
     Mat frame; 
     cap >> frame; // get a new frame from camera 
     cvtColor(frame, edges, CV_BGR2GRAY); 
     GaussianBlur(edges, edges, Size(7,7), 1.5, 1.5); 
     Canny(edges, edges, 0, 30, 3); 
     imshow("edges", edges); 
     if(waitKey(30) >= 0) break; 
    } 
    return 0; 
} 

私は同じサンプルを使用するので、私は本当に、何が起こっているのかわかりませんが、動作を停止することを決定しました。

答えて

0

アサーションは、cvtColorの入力に3または4チャンネルが含まれているかどうかを確認します。どちらのカメラでもデータが復元されませんでした。この場合、cout << frame.size();[0 x 0]をコンソールに出力するか、カメラがBGRイメージを生成しません。チャネル番号はframe.channels()に電話で確認できます。

frame.size()[0 x 0]の場合は、別のプログラムで使用されているOSでカメラが無効になっているか、OpenCVとの互換性の問題があります。あなたはそれが他のプログラムと連携しているかどうかチェックするべきです。

あなたのチャンネル数が1の場合は、カメラがすでにグレーの画像を取得していることを意味します。変換は行わないでください。私はOpenCVが他のチャンネル数でメソッドを取得することをサポートしているとは思わないが、間違っているかもしれない。

関連する問題