2017-11-09 13 views
0

2台のカメラからストリームを送信するのにltbbを使用しています。 ltbbは、2台のカメラからの同時ストリーミング用に2つのスレッドを作成します(2台のカメラのため)。フレームをフェッチするために並行キューを使用します。私はiMats[i] = frameを行うと、他の関数に渡していたときにマルチスレッドビデオキャプチャからフレームにアクセスしようとするとエラーが発生する

while (waitKey(20) != 27) 
    { 
    //Retrieve frames from each camera capture thread 
    vector<Mat> iMats(capture_source.size()); 

    for (int i = 0; i < capture_source.size(); i++) 
    { 
     Mat frame; 

     //Pop frame from queue and check if the frame is valid 
     if (cam.frame_queue[i]->try_pop(frame)) 
     { 
     //Show frame on Highgui window 
     // IMats.push_back(frame); 
     iMats[i] = frame; 
     imshow(label[i], frame); 
     } 

    } // end of for - loop 

    int x = opencv_tri(iMats); 
    } 

問題がで、それは私にエラーを与えている:次のコードスニペットは、フレームが表示されます。 iMatsにコメントしてopencv_tri(iMats)を呼び出すのをやめたときにうまく動作します

エラー:Segmentation fault (core dumped)

リンクopencv_triする:opencv_tri.cpp

は誰が説明し、私はこの問題を解決するために助けてくださいことはできますか?

+0

間違った値にアクセスしようとはしません。この方法は、多分あなた...境界エラーのうちのように見えます'[] '演算子の代わりに[http://www.cplusplus.com/reference/vector/vector/at/](' at')関数を使ってみることができます。この場合、例外をチェックしてスローします。あなたは確かにあなたが限界を超えていることを知っています。ところで、あなたは間違っていることを理解するために関数 'opencv_tri'を置くべきです。あなたは 'frame = iMats [i]'をどこでやっていますか?あなたのコードには表示されません。 – api55

+0

@ api55私はそれを更新しました。それは 'iMats [i] = frame'で、' opencv_tri'関数へのリンクを追加しました。 –

答えて

0

残念ながら私はコメントできません。 あなたのベクトルは空であると思うので、[i]番目の要素にアクセスすることはできません。

vector<Mat> iMats(capture_source.size()); 

これは、capture_source.size()要素を含む空のVectorを作成します。

+0

私はコード内で 'iMats.push_back(frame)'を実行しましたが、問題はそれではありません。それは連続的にストリーミングされていないので、フレームと三角測量を表示するには 'Esc'キーを押す必要があります。 –

0

私はあなたがリンクしたopencv_tri関数全体を調べなかったが、私は考えられるエラーを見つけた。あなたは以下の

for(int i = 0;i<imats.size();i+=2) 
{ 

を持って

...

Mat imgATest = imats[i]; 
Mat imgBTest = imats[i+1]; 

iimats.size()-1であるとき、それはアクセスしようとします:

Mat imgBTest = imats[i+1]; 

これは範囲外です。 I + 1がimats.size()-1

for(int i = 0;i<imats.size()-1;i+=2) 
{ 

までループする必要はありimats.size()

あるので、それは

+0

この場合、 'imats.size()'の値は '2'で' i + = 2'を実行していますので、 'out of bounds error'を得ることはできません。 **これはエラーの原因ではありません。** –

+0

それにもかかわらず、**はエラーです**。デバッガを使用して、エラーを返す正確な行を少なくとも知るようにしてください。こうすることで、何が間違っているのかを突き止めることが容易になります。私はそれが 'opencv_tri'関数の中にあることをほとんど確信しています。失敗するまで、デバッガで行ごとに試してみてください。 – api55

関連する問題