質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Debian

Debianは、Debian GNU/Linux などのOS(オペレーティングシステム)です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

Q&A

解決済

1回答

1640閲覧

RaspberryPiでOpenCVを使ったC++のプログラムでエラーが発生します

b452452

総合スコア39

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Debian

Debianは、Debian GNU/Linux などのOS(オペレーティングシステム)です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

0グッド

0クリップ

投稿2022/09/07 05:48

前提

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;  } }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

b452452

2022/09/07 06:14

raspi-configでレガシーカメラサポートを有効にし再起動せず実行したところ解消しました。 ただ再起動したところレガシーカメラサポートが無効に戻ってしまったようです。 再度レガシーカメラを有効にし再起動せず実行すると、レガシーカメラサポートが無効の際と同じエラーが発生しました。
guest

回答1

0

ベストアンサー

カメラのドキュメント によると、legacy camera は 64-bit Raspberry Pi OS では有効化できないとあります。

Warning
The legacy camera stack cannot be re-enabled on a 64-bit Raspberry Pi OS release.

Debian のことは書いてありませんが、同様に有効化できないのではないでしょうか?

投稿2022/09/08 04:14

yuki23

総合スコア1448

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

b452452

2022/09/08 04:27

raspi-configで有効化に設定する項目があり、有効化すると再起動を促されますが、再起動後レガシーカメラの有効/無効を確認すると無効になっている、というような感じです。 いただいたリファレンスの通り、できないような気もします。 一時的にはできるようですので、一旦解決とします ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問