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
は誰が説明し、私はこの問題を解決するために助けてくださいことはできますか?
間違った値にアクセスしようとはしません。この方法は、多分あなた...境界エラーのうちのように見えます'[] '演算子の代わりに[http://www.cplusplus.com/reference/vector/vector/at/](' at')関数を使ってみることができます。この場合、例外をチェックしてスローします。あなたは確かにあなたが限界を超えていることを知っています。ところで、あなたは間違っていることを理解するために関数 'opencv_tri'を置くべきです。あなたは 'frame = iMats [i]'をどこでやっていますか?あなたのコードには表示されません。 – api55
@ api55私はそれを更新しました。それは 'iMats [i] = frame'で、' opencv_tri'関数へのリンクを追加しました。 –