OpenCVを用いたネットワークカメラ動画の取得において、フレーム読み込み(下記コード内のtry内のcam1.read(m1))において、半日くらい経過するとエラーが発生します。このコードはスレッド内で動いており、他のスレッドはcurrent_frame1を読み込んでいます。
カメラは、HIKVISIONのDS-2CD2022WD-Iです。
C++
1const char* channel1="rtsp://user***:pass***@192.168.204.161/streaming/channels/101/" 2 3cv::VideoCapture cam1(channel1); 4cv::Mat m1; 5while (1) { 6 try { 7 if (!cam1.isOpened()) { 8 cv::VideoCapture cam_temp(channel1); 9 cam1 = cam_temp; 10 } 11 cam1.read(m1);//エラー発生個所 12 if (m1.empty()) { 13 cv::VideoCapture cam_temp(channel1); 14 cam1 = cam_temp; 15 cam1.read(m1); 16 cout << "empty_1\r\n"; 17 } 18 if (!m1.empty()) { 19 mtx.lock(); 20 current_frame1 = m1; 21 mtx.unlock(); 22 } 23 } 24 catch (...) { 25 cv::VideoCapture cam_temp1(channel1); 26 cam1 = cam_temp1; 27 cout << "error\r\n"; 28 } 29}
マルチスレッドを使わないで、カメラからキャプチャーし続けるプログラムを流してみて、エラーが起こるかどうか確認してみてはどうでしょうか?OpenCV の問題なのか、マルチスレッドの問題なのか切り分けしたほうがいい気がします。
回答1件
あなたの回答
tips
プレビュー