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

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

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

Q&A

解決済

1回答

858閲覧

OpenCVのインクルードエラーが解決できない

kouchakaden

総合スコア4

0グッド

0クリップ

投稿2024/06/26 05:45

実現したいこと

MacBook Air(M1, 2020)上でC++を実行する上で、OpenCVのインクルードエラーを解決したい

発生している問題・分からないこと

#include <opencv2/opencv.hpp>のように、opencvをインクルードしたところ、

  • #include エラーが検出されました。includePath を更新してください。
  • ソース ファイルを開けません "ruby/internal/assume.h" (dependency of "opencv2/opencv.hpp")C/C++(1696)
  • 'opencv2/opencv.hpp' file not found gcc

という3つのエラーが発生しているが、opencvは規定のディレクトリにあるにも関わらず、エラーが消えない。

該当のソースコード

C++

1#include <opencv2/opencv.hpp> 2 3int main() { 4 cv::Mat img = cv::imread("sample.jpg"); 5 6 cv::imshow("img", img); 7 8 cv::waitKey(0); 9 10 return 0; 11}

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

Googleを調べたところ、C++の実行方法として、CMakeLists.txtというものを作り、実行したいファイルがあるディレクトリ上で

  • mkdir build && cd build
  • cmake .. && make
  • ./main

とターミナル上でコマンドを打てば、実行できることを知り、やってみたところ、実行できた。しかし、本当は、VSCode上の矢印の「C/C++ファイルの実行」やターミナル上で
g++ main.cpp –o main pkg-config --libs opencv --cflags opencv4
というようなコマンドを使い、実行したかった。インクルードエラーが解決していないため、実行することができない。

補足

使っているIDE:Visual Studio Code
PC:MacBook Air(M1, 2020)

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

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

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

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

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

otn

2024/06/26 07:55

#includeはそのままで、mainの中味を return 0; の1行のみにするとエラーメッセージはどうなりますか?
otn

2024/06/26 07:59

あと、pkg-config --libs opencv --cflags opencv4 の出力結果はどんなものでしょうか?
kouchakaden

2024/06/26 11:35

mainの中身をreturn 0:のみにしましたが、やはり同じエラーが出ました。 pkg-config --libs opencv --cflags opencv4 の出力結果は、 (base) (ユーザー名)@MacBook-Air opencv % pkg-config --libs opencv --cflags opencv4 Package opencv was not found in the pkg-config search path. Perhaps you should add the directory containing `opencv.pc' to the PKG_CONFIG_PATH environment variable No package 'opencv' found でした。
otn

2024/06/26 12:28

> やはり同じエラーが出ました。 実際のエラーメッセージ全文を掲載しましょう。 > pkg-config --libs opencv --cflags opencv4 の出力結果は、 やはりPATHが通ってないと言うことですね。 you should add the directory containing `opencv.pc' to the PKG_CONFIG_PATH environment variable という指示に従いましょう。
kouchakaden

2024/06/27 04:39

>実際のエラーメッセージ全文を掲載しましょう。 ・#include エラーが検出されました。includePath を更新してください。 ・'opencv2/opencv.hpp' file not found gcc というエラーでした。 >you should add the directory containing `opencv.pc' to the PKG_CONFIG_PATH environment variable という指示に従いましょう。 そもそも、opencv.pcというファイルがないのですが、どうするべきでしょうか?
otn

2024/06/28 08:41

> そもそも、opencv.pcというファイルがないのですが、どうするべきでしょうか? そりゃ作るのでしょう。「このファイルに書け」という指示のファイルが今なければ作るという選択肢以外無いと思いますけど??作る場所を間違えないように。 opencvは使ったことないですが、検索するといくらでも情報がありますね。 最終的には、g++ のコマンドラインの -I オプションや -L -l オプションにどのディレクトリーやファイルを与えるかということになるので、それらを把握しているのなら、pkg-configに頼らず自分で明示的に与えても良いと思いますが。
yaito3014

2024/07/02 15:18

おそらく brew を通して opencv をインストールした過程で pkg-config もインストールされていると思われますが、 `pkg-config --libs --cflags opencv4` が適切なフラグを返すならば正常に動作すると思います pkg-config が認識しているパッケージは `pkg-config --list-all` で表示でき、 opencv 関連のものを探すならば `pkg-config --list-all | grep opencv` とすると良いでしょう 現在のところ brew や apt で提供されている opencv 4.x のパッケージは opencv.pc を提供しておらず、opencv4.pc が提供されているならば必要ないと思われます
kouchakaden

2024/07/09 02:27

brewでopencvとpkg-configを再インストールしたところ、pkg-config --libs --cflags opencv4 の出力は、以下の通りになりました。 (base) (ユーザー名)@MacBook-Air ~ % pkg-config --libs --cflags opencv4 -I/opt/homebrew/opt/opencv/include/opencv4 -L/opt/homebrew/opt/opencv/lib -lopencv_gapi -lopencv_stitching -lopencv_alphamat -lopencv_aruco -lopencv_bgsegm -lopencv_bioinspired -lopencv_ccalib -lopencv_dnn_objdetect -lopencv_dnn_superres -lopencv_dpm -lopencv_face -lopencv_freetype -lopencv_fuzzy -lopencv_hfs -lopencv_img_hash -lopencv_intensity_transform -lopencv_line_descriptor -lopencv_mcc -lopencv_quality -lopencv_rapid -lopencv_reg -lopencv_rgbd -lopencv_saliency -lopencv_sfm -lopencv_stereo -lopencv_structured_light -lopencv_phase_unwrapping -lopencv_superres -lopencv_optflow -lopencv_surface_matching -lopencv_tracking -lopencv_highgui -lopencv_datasets -lopencv_text -lopencv_plot -lopencv_videostab -lopencv_videoio -lopencv_viz -lopencv_wechat_qrcode -lopencv_xfeatures2d -lopencv_shape -lopencv_ml -lopencv_ximgproc -lopencv_video -lopencv_xobjdetect -lopencv_objdetect -lopencv_calib3d -lopencv_imgcodecs -lopencv_features2d -lopencv_dnn -lopencv_flann -lopencv_xphoto -lopencv_photo -lopencv_imgproc -lopencv_core この通りですが、このような出力で合っていますでしょうか? また、再インストールしたところ、opencv4.pcが/opt/homebrew/Cellar/opencv/4.9.0_12/lib/pkgconfig/opencv4.pcにダウンロードされました(なお、opencvのC++の一通りのヘッダーファイルは/opt/homebrew/Cellar/opencv/4.9.0_12/include/opencv4/opencv2にダウンロードされました)。 you should add the directory containing `opencv.pc' to the PKG_CONFIG_PATH environment variableというエラーもあったため、"https://ja.stackoverflow.com/questions/53767/macos-c%E3%81%A7opencv%E3%81%8C%E5%AE%9F%E8%A1%8C%E3%81%A7%E3%81%8D%E3%81%AA%E3%81%84" のサイトに記載されていたことを参考に、~/.bash_profileにexport PKG_CONFIG_PATH="/opt/homebrew/Cellar/opencv/4.9.0_12/lib/pkgconfig/opencv4.pc"の記述を追加したのですが、それでも (base) (ユーザー名)@MacBook-Air OpenCV % g++ affine.cpp `pkg-config --libs opencv --cflags opencv4` Package opencv was not found in the pkg-config search path. Perhaps you should add the directory containing `opencv.pc' to the PKG_CONFIG_PATH environment variable No package 'opencv' found affine.cpp:4:10: fatal error: 'opencv2/opencv.hpp' file not found #include <opencv2/opencv.hpp> ^~~~~~~~~~~~~~~~~~~~ 1 error generated. のエラーが出ます。どう改善すれば良いでしょうか?
yaito3014

2024/07/09 02:31 編集

存在しない、必要のない opencv.pc を pkg-config が探そうとしてエラーとなっています g++ affine.cpp `pkg-config --libs --cflags opencv4` のように opencv を取り除いて実行してください
kouchakaden

2024/07/09 02:49 編集

"opencv"の文言を消して実行してみました。そうすると、出力が (base) (ユーザー名)@MacBook-Air OpenCV % g++ affine.cpp `pkg-config --libs --cflags opencv4` In file included from affine.cpp:4: In file included from /opt/homebrew/opt/opencv/include/opencv4/opencv2/opencv.hpp:52: In file included from /opt/homebrew/opt/opencv/include/opencv4/opencv2/core.hpp:52: /opt/homebrew/opt/opencv/include/opencv4/opencv2/core/cvdef.h:788:4: error: "OpenCV 4.x+ requires enabled C++11 support" # error "OpenCV 4.x+ requires enabled C++11 support" ^ In file included from affine.cpp:4: In file included from /opt/homebrew/opt/opencv/include/opencv4/opencv2/opencv.hpp:52: In file included from /opt/homebrew/opt/opencv/include/opencv4/opencv2/core.hpp:53: In file included from /opt/homebrew/opt/opencv/include/opencv4/opencv2/core/base.hpp:58: In file included from /opt/homebrew/opt/opencv/include/opencv4/opencv2/core/cvstd.hpp:81: /opt/homebrew/opt/opencv/include/opencv4/opencv2/core/cvstd_wrapper.hpp:40:44: warning: variadic templates are a C++11 extension [-Wc++11-extensions] template<typename C, typename Ret, typename... Args> ^ (エラーがここに載せきれないほど発生したため、一部を記載) fatal error: too many errors emitted, stopping now [-ferror-limit=] 41 warnings and 20 errors generated.となり、ここには載せきれないほどのエラーが発生しました。バージョンが違うということでしょうか?
yaito3014

2024/07/09 02:45

gcc のバージョンが古く、デフォルトで C++11 以上が選択されていないと思われますので、g++ affine.cpp -std=c++11 `pkg-config --libs --cflags opencv4` のように -std=c++11 オプション(必要ならばより高いバージョンを指定してください)を追加する、またはより新しいコンパイラを使ってみてください
kouchakaden

2024/07/09 02:50

ありがとうございます。実行できるようになりました。 様々なエラーの相談に乗っていただき、ありがとうございました!
kouchakaden

2024/07/09 02:51

それから、ベストアンサーに選びたいので同じ内容を回答欄に投稿いただけますでしょうか?
guest

回答1

0

ベストアンサー

注釈:コメント欄にて解決したため要点を抜粋

存在しない opencv.pc を pkg-config が探そうとしてエラーとなっています
おそらく brew を通して opencv をインストールした過程で pkg-config もインストールされていると思われますが、 pkg-config --libs --cflags opencv4 が適切なフラグを返すならば
g++ -std=c++11 affine.cpp `pkg-config --libs --cflags opencv4`
のように opencv を取り除いて実行することで正常に動作すると思います
pkg-config が認識しているパッケージは pkg-config --list-all で表示でき、 opencv 関連のものを探すならば pkg-config --list-all | grep opencv とすると良いでしょう
現在のところ brew や apt で提供されている opencv 4.x のパッケージは opencv.pc を提供しておらず、opencv4.pc が提供されているならば必要ないと思われます

投稿2024/07/09 03:00

yaito3014

総合スコア209

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問