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

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

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

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

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

C++

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

Q&A

解決済

3回答

2988閲覧

OpenCVのコンパイルエラー

KakeruM.

総合スコア16

OpenCV

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

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

C++

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

0グッド

0クリップ

投稿2019/01/09 07:20

OpenCVをmacOSでC言語で使いたい

コンパイルしたときにエラーが出てしまいます。
何がダメで以下の二つは何が違うのでしょうか?

発生している問題・エラーメッセージ

"OpenCV 4.x+ requires enabled C++11 support"

ターミナルに下記を入力

g++ -o main main.cc `pkg-config --cflags --libs opencv`

コード

c++

1 #include <opencv2/opencv.hpp> 2 3using namespace cv; 4 5int main() 6{ 7 Mat image = Mat::zeros(100, 100, CV_8UC3); 8 imshow("", image); 9 waitKey(0); 10} 11

試したこと

ターミナルへの入力を、
g++ -o main main.cc pkg-config --cflags --libs opencv2
とすると、
fatal error: 'opencv2/opencv.hpp' file not found
が表示されます。

補足情報(FW/ツールのバージョンなど)

Mac最新のOSです

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

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

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

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

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

guest

回答3

0

opencv2/opencv.hpp のファイルがないといってますが、そのファイルはありますか?

投稿2019/01/09 07:26

y_waiwai

総合スコア87719

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

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

KakeruM.

2019/01/09 07:35

ご回答ありがとうございます。 仕組みがいまいち分かっていません。一応、OpenCVをWEB上でダウンロードはしています。 また、pythonでは実装できるています。 何か、確認する方法はありますか?
y_waiwai

2019/01/09 07:56

まともに読めば、そのソースファイルのある場所のopencv2フォルダの中のopencv.hppファイルを見に行ってますが、それがないといってますね
KakeruM.

2019/01/09 13:09

回答ありがとうございます。 ファイルがごちゃごちゃしてたので、整理してみます。
guest

0

先日リリースされた OpenCV 4 からこ C++11 が必須になりました。

g++ -o main main.cc pkg-config --cflags --libs opencv2

g++ -o -std=c++11 main main.cc pkg-config --cflags --libs opencv2
のように C++11 オプションを有効にしてみてはどうでしょうか。


追記

1. 以下のようなフォルダ構成を用意する。

sample ├── CMakeLists.txt (ファイル) ├── build (ディレクトリ) └── src (ディレクトリ) └── main.cpp (ファイル)

CMakeLists.txt と main.cpp の中身は以下とする。

CMakeLists.txt

cmake

1cmake_minimum_required(VERSION 2.8) 2 3set (CMAKE_CXX_STANDARD 11) 4project(sample) 5add_executable(${PROJECT_NAME} src/main.cpp) 6 7find_package(OpenCV REQUIRED) 8include_directories(${OpenCV_INCLUDE_DIRS}) 9target_link_libraries(${PROJECT_NAME} ${OpenCV_LIBS})

main.cpp

cpp

1#include <opencv2/opencv.hpp> 2 3int main(int argc, char *argv[]) 4{ 5 if (argc == 1) 6 { 7 std::cerr << "sample.exe <image_filepath>" << std::endl; 8 return 1; 9 } 10 11 cv::Mat img = cv::imread(argv[1]); 12 if (img.empty()) 13 return 1; 14 15 cv::imshow("image", img); 16 cv::waitKey(0); 17 18 cv::destroyAllWindows(); 19 return 0; 20}

2. cmake する。

$ cd <sample ディレクトリがある場所>/build $ cmake ..

もし、cmake で以下のエラーが出たら、OpenCV がある場所を自動で見つけられなかったので、OpenCV をインストールした場所を次のように引数で教えてあげる。

Could not find a package configuration file provided by "OpenCV" with any of the following names:
cmake .. -DCMAKE_PREFIX_PATH=<OpenCV をインストールした場所>

3. ビルドする。

$ make

投稿2019/01/09 07:25

編集2019/01/10 07:29
tiitoi

総合スコア21954

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

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

KakeruM.

2019/01/09 07:33

早速回答ありがとうございます。 試してみたところ、以下のようなエラーが出ました。 clang: error: unsupported option '--cflags' clang: error: unsupported option '--libs' clang: error: no such file or directory: 'main' clang: error: no such file or directory: 'pkg-config' clang: error: no such file or directory: 'opencv2' 追加で対処方法分かりますでしょうか?
tiitoi

2019/01/09 07:59

Mac はないので、質問者さんのコンパイラ等わからないのですが、CMake を使ってビルドするのが一般的かと思います。 やり方を追記しました。
KakeruM.

2019/01/09 13:08

ご回答ありがとうございます。 cmake . コマンド後に、 CMake Error at CMakeLists.txt:11 (message): FATAL: In-source builds are not allowed. You should create a separate directory for build files. -- Configuring incomplete, errors occurred! のエラーが出てきました。
tiitoi

2019/01/09 14:03 編集

すいません。build というフォルダを CMakeLists.txt があるディレクトリに作ってその中で cmake .. を実行してみてください。 $ cd <CMakeLists.txt があるディレクトリ> $ mkdir build $ cd build $ cmake .. $ make 回答も修正しました。
KakeruM.

2019/01/09 14:12

回答ありがとうざいます。早速やってみたのですが、同じエラーが出てきました...
tiitoi

2019/01/09 14:27 編集

build ディレクトリ内に cd で移動して cmake .. (. ではなく1つ上のディレクトリなので ..) を実行しましたか? 最初に cmake に失敗した際に、いろいろ CMakeCaches.txt 等のファイルが生成されてしまっているかもしれないので、もしあれば生成されたファイルは全部消して回答欄のようなフォルダ構成の状態にしてください。
tiitoi

2019/01/09 14:26

もしそれでもうまくいかないようであれば、Mac はないので、それに近いと思われる Linux 環境のほうで確認してみますね。
KakeruM.

2019/01/09 14:40

確認したら他のファイルなどは生成されてはいませんでした。 回答ありがとうございます。
tiitoi

2019/01/10 03:13

Linux で確認しましたが、OpenCV 4 をソースビルドで導入したあと、回答の通りに実行してビルド及び実行できることが確認できました。
KakeruM.

2019/01/10 03:28

ソースコードのビルド方法であってます。 導入の時点でのミスがあるかもしれませんので、もう一度確認してみます。
tiitoi

2019/01/10 03:36

> FATAL: In-source builds are not allowed. このエラーなんですが、OpenCV 自体のソースコードがあるディレクトリで cmake . としたら再現しました。エラーは OpenCV の CMakeLists.txt が出しています。 https://github.com/opencv/opencv/blob/master/CMakeLists.txt in source build というのはソースコードと同じディレクトリでビルドすることを意味します。 OpenCV をビルドするわけでないのに、このエラーが出てくるのがおかしい気がします。 ご自身のソースコードを OpenCV のソースがあるディレクトリに配置していたりしませんかね?
KakeruM.

2019/01/10 03:57

申し訳ございません。ここ数日で様々変更してしまい、混乱せてしまっています。何を確認すればいいのかも... もう一度最初から行ういい方法などはないでしょうか?お手数おかけしますが、よろしくお願いします。
tiitoi

2019/01/10 07:34 編集

まず OpenCV を正しくインストールできているのか確認したほうがよいと思います。 Windows や Linux でしたら具体的な手順を記載できますが、当方 Mac は持っていないので、検索して出てくるサイトを参照してください。(cmake を使ってビルド、インストールするので、そんなにやり方は違わないと思いますが) インストールができたら、回答に記載した通りに新たにフォルダを作ってファイルを作成して試してみるとビルドできると思います。(Windows や Linux ではビルドできることを確認しました。)
KakeruM.

2019/01/10 10:00

上記ビルドするところまではうまくいきました。 最後、コンパイルすると、 In file included from main.cpp:1: In file included from /usr/local/Cellar/opencv/4.0.1/include/opencv4/opencv2/opencv.hpp:52: In file included from /usr/local/Cellar/opencv/4.0.1/include/opencv4/opencv2/core.hpp:52: /usr/local/Cellar/opencv/4.0.1/include/opencv4/opencv2/core/cvdef.h:656:4: error: "OpenCV 4.x+ requires enabled C++11 support" # error "OpenCV 4.x+ requires enabled C++11 support" ^ というエラーが最初に来て、これを含み、35warnings and 20errors が出てきました。 丁寧な回答ありがとうございます。もう少しだと思うので、ご協力お願いします。
tiitoi

2019/01/10 10:09

> OpenCV 4.x+ requires enabled C++11 support エラーの背景について補足すると、C++ は 03, 11, 14, 17 などいくつかのバージョンがあります。 今 C++ 界隈で最も普及しているのが C++11 で、OpenCV 4 から C++11 に変更されました。 コンパイラはなにも指定しないと、C++03 のコードだと思ってビルドしようとするので、エラーになるため、コンパイラに C++11 としてビルドするように指示してあげる必要があります。 cmake のバージョンはいくつでしょうか?(cmake --version で確認できます。) 3.1 以降であれば、CMakeLists.txt に回答欄にすでに記載済みですが、`set (CMAKE_CXX_STANDARD 11)` と記載することで、C++11 としてビルドされるはずなので、そのようなエラーはでないはずですが。 cmake のバージョンが古い等原因はわかりませんが、そのようなエラーが出るようであれば、cmake -DCMAKE_CXX_FLAGS="-std=c++11" .. というように -DCMAKE_CXX_FLAGS="-std=c++11" オプションを追加して試して見てください。
KakeruM.

2019/01/10 10:49

ご回答ありがとうございます。しかし、cmake version 3.13.2でした...
KakeruM.

2019/01/10 11:00

少々長めですが、コピペで失礼します。 -- The CXX compiler identification is AppleClang 10.0.0.10001145 -- Check for working CXX compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ -- Check for working CXX compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ -- broken CMake Error at /usr/local/Cellar/cmake/3.13.2/share/cmake/Modules/CMakeTestCXXCompiler.cmake:45 (message): The C++ compiler "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++" is not able to compile a simple test program. It fails with the following output: Change Dir: /Users/name/sample/CMakeFiles/CMakeTmp Run Build Command:"/usr/bin/make" "cmTC_b4cdc/fast" /Applications/Xcode.app/Contents/Developer/usr/bin/make -f CMakeFiles/cmTC_b4cdc.dir/build.make CMakeFiles/cmTC_b4cdc.dir/build Building CXX object CMakeFiles/cmTC_b4cdc.dir/testCXXCompiler.cxx.o /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ -std=c++11.. -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk -o CMakeFiles/cmTC_b4cdc.dir/testCXXCompiler.cxx.o -c /Users/kakeru/sample/CMakeFiles/CMakeTmp/testCXXCompiler.cxx error: invalid value 'c++11..' in '-std=c++11..' note: use 'c++98' or 'c++03' for 'ISO C++ 1998 with amendments' standard note: use 'gnu++98' or 'gnu++03' for 'ISO C++ 1998 with amendments and GNU extensions' standard note: use 'c++11' for 'ISO C++ 2011 with amendments' standard note: use 'gnu++11' for 'ISO C++ 2011 with amendments and GNU extensions' standard note: use 'c++14' for 'ISO C++ 2014 with amendments' standard note: use 'gnu++14' for 'ISO C++ 2014 with amendments and GNU extensions' standard note: use 'c++17' for 'ISO C++ 2017 with amendments' standard note: use 'gnu++17' for 'ISO C++ 2017 with amendments and GNU extensions' standard note: use 'c++2a' for 'Working draft for ISO C++ 2020' standard note: use 'gnu++2a' for 'Working draft for ISO C++ 2020 with GNU extensions' standard make[1]: *** [CMakeFiles/cmTC_b4cdc.dir/testCXXCompiler.cxx.o] Error 1 make: *** [cmTC_b4cdc/fast] Error 2 CMake will not be able to correctly generate this project. Call Stack (most recent call first): CMakeLists.txt:4 (project) -- Configuring incomplete, errors occurred! See also "/Users/name/sample/CMakeFiles/CMakeOutput.log". See also "/Users/name/sample/CMakeFiles/CMakeError.log".
tiitoi

2019/01/10 11:13

なぜ 'c++11..' と C++11 のあとに .. が入っているんでしょうか? 本当に cmake -DCMAKE_CXX_FLAGS="-std=c++11" .. と実行していますか?
KakeruM.

2019/01/10 11:17

分かりません。しかし、確認したところ間違いなく cmake -DCMAKE_CXX_FLAGS="-std=c++11" .. と実行しています...
tiitoi

2019/01/10 11:34

すみませんが、Mac 環境がないので、もしお使いの環境に依存する問題なのだとしたら、原因はこちらではわからないです。 記載されたメッセージを見ると、コンパイラは AppleClang を使われてるみたいですね。 こちらでは、Linux 環境で gcc または clang で試しましたが、CMakeLists.txt から「set (CMAKE_CXX_STANDARD 11)」を消したら「OpenCV 4.x+ requires enabled C++11 support」が出てエラーになるのは確認しました。(そう出るのは意図どおり) その状態で、cmake -DCMAKE_CXX_FLAGS="-std=c++11" .. で C++11 が有効になり、正常にビルドできました。 なので、質問者さんが取り組むべき問題としては、お使いの環境で 「C++11 のソースコードをビルドする」ということになると思います。 こちらでは、記載の通りでビルドできるので、質問者さんができない原因はわかりかねます。「cmake C++11 Mac」などのキーワードで調べて、いろいろ試されるといいかもしれないですね。
tiitoi

2019/01/10 11:44 編集

Mac の clang 環境で CMAKE_CXX_STANDARD 11 や DCMAKE_CXX_FLAGS が効かないのは cmake のバグと書かれているのを見つけました。もしかしたら、関係あるかもしれません。 https://stackoverflow.com/questions/10851247/how-to-activate-c-11-in-cmake https://gitlab.kitware.com/cmake/cmake/issues/15943 CMakeLists.txt の一番上に cmake_policy(SET CMP0025 NEW) を入れると直るという記述もありますが、効果があるかはわかりません。
KakeruM.

2019/01/10 16:10

回答ありがとうございます。 試してみましたが、同じエラーが発生しました。 自分でも調べてみますね。
guest

0

自己解決

g++ -std=c++11 main.cpp -o main pkg-config --cflags --libs opencv

上記のコンパイル。

ダウンロードの参考は、
https://www.learnopencv.com/install-opencv-4-on-macos/

投稿2019/01/13 09:33

KakeruM.

総合スコア16

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問