前提
Raspberry Pi 4B Debian GNU/Linux 11 (bullseye) 64bit
ラズパイにはWebカメラ、キーボード、マウス、ディスプレイを接続し直接操作
OpenCVのバージョンは4.5
raspi-configでレガシーカメラをEnableに設定
実現したいこと
C++でOpenCVを使ってカメラ映像をcv::imshowでウィンドウに表示させたいです。
発生している問題・エラーメッセージ
後述のビルドコマンドはエラー出ず成功します。
./outを実行すると、cv::VideoCapture cap(0);でエラーが出ているようで、メッセージが表示されます。
また、エラーが発生したときにアプリケーションは停止せず、その後のコード(画像保存や"処理終了"文字出力)も動作しreturn 0までいっているようです。
エラー内容です
[ WARN:0] global ../modules/videoio/src/cap_gstreamer.cpp (1824) handleMessage OpenCV | GStreamer warning: Embedded video playback halted; module v4l2src0 reported: Failed to allocate required memory. [ WARN:0] global ../modules/videoio/src/cap_gstreamer.cpp (914) open OpenCV | GStreamer warning: unable to start pipeline [ WARN:0] global ../modules/videoio/src/cap_gstreamer.cpp (501) isPipelinePlaying OpenCV | GStreamer warning: GStreamer: pipeline have not been created
ビルドコマンドです
g++ -o out main.cpp -I /usr/include/opencv4 -l opencv_core -l opencv_objdetect -l opencv_highgui -l opencv_imgproc -l opencv_videoio -l opencv_imgcodecs
実行コマンドです
./out
main.cppのソースコードの1部です
#include "opencv2/opencv.hpp" int main() { try{ cv::VideoCapture cap(0); //ここでエラー表示 ただしその後の処理も走る cap.set(cv::CAP_PROP_FRAME_WIDTH, 1280); //解像度 cap.set(cv::CAP_PROP_FRAME_HEIGHT, 720); //解像度 cv::Mat frame; while (cap.read(frame)) //ループ開始 { cv::imshow("test", frame); //ウィンドウが表示されない cv::imwrite("img.png", frame); //保存はされるようです break; //テストなので1回で抜けさせています } cv::destroyAllWindows(); cout << "処理終了" << endl; //出力される return 0; } catch (const std::exception &e) { return 1; } }

回答1件
あなたの回答
tips
プレビュー