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

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

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

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

MacOS(OSX)

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

C++

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

Q&A

0回答

2782閲覧

Mac上のC++プログラムでOpenCVのfindFile()を使う方法

asiangeorge

総合スコア8

OpenCV

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

MacOS(OSX)

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

C++

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

0グッド

0クリップ

投稿2020/04/17 12:36

編集2020/04/17 12:38

前提・実現したいこと

OpenCV4.2を使ったC++プログラムで、samples::findFile()で画像ファイルのパスを探した上でcv::imread()を使って画像を開きたい。

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

samples::findFil()がエラーになります。

[ WARN:0] global /Users/(username)/opencv/source/opencv-4.2.0/modules/core/src/utils/samples.cpp (59) findFile cv::samples::findFile('templatePicture.png') => '' libc++abi.dylib: terminating with uncaught exception of type cv::Exception: OpenCV(4.2.0) /Users/(username)/opencv/source/opencv-4.2.0/modules/core/src/utils/samples.cpp:62: error: (-2:Unspecified error) OpenCV samples: Can't find required data file: templatePicture.png in function 'findFile'

該当のソースコード

C++

1#include <iostream> 2#include <opencv2/opencv.hpp> 3#include <opencv2/core.hpp> 4#include <opencv2/imgcodecs.hpp> 5#include <opencv2/highgui.hpp> 6 7using namespace std; 8using namespace cv; 9 10int main() { 11 string PATH_TEMPLATE = samples::findFile("templatePicture.png"); 12 13 Mat image; // Create a matrix to store the image 14 image = imread(PATH_TEMPLATE, IMREAD_COLOR); // Read the image file 15 16 if(image.empty()) { 17 cout << "Could not read the image: " << PATH_TEMPLATE << endl; 18 return 1; 19 } 20 21 imshow("Template Image", image); // Display the image matrix in a window 22 waitKey(); // Wait until a key is pressed 23 24 return 0; 25}

フォルダ構成

Project/
├ cmake-build-debug/
│ ├ CMakeFiles/
│ ├ cmake_install.cmake
│ ├ Project
│ ├ Project.cbp
│ └ Makefile
├ Images/
│ └ templatePicture.png
├ CMakeLists.txt
└ main.cpp

開きたいファイルはmain.cppと同じ階層にあるImageフォルダー内のtemplatePicture.pngです。

試したこと

findFile()で指定するパスをImage/templatePicture.pngとしてみましたが変わりありませんでした。

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

開発環境は、

  • MacOS 10.15.4 (Catalina)
  • Clion 2019.3バージョン

です。

findFile()を使わずに直接PATH_TEMPLATE = "../Images/templatePicture.png"と指定すると動くのですが、IDEによってどこに実行ファイルが作られるか(main.cppと同じディレクトリか同じディレクトリ内の別のディレクトリ内か)に依存しないようにしたいのでfindFile()を使う方法を検討しています。

よろしくお願いします。

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

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

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

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

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

hoshi-takanori

2020/04/19 03:15

Search directories: 1. Directories passed via addSamplesDataSearchPath() 2. OPENCV_SAMPLES_DATA_PATH_HINT environment variable 3. OPENCV_SAMPLES_DATA_PATH environment variable If parameter value is not empty and nothing is found then stop searching. 4. Detects build/install path based on: a. current working directory (CWD) b. and/or binary module location (opencv_core/opencv_world, doesn't work with static linkage) 5. Scan <source>/{,data,samples/data} directories if build directory is detected or the current directory is in source tree. 6. Scan <install>/share/OpenCV directory if install directory is detected. とありますけど。 https://docs.opencv.org/3.4/d6/dba/group__core__utils__samples.html#ga3a33b00033b46c698ff6340d95569c13
asiangeorge

2020/04/21 14:45

上記読んでみましたけど、分かりません。 1の中でaddSamplesDataSearchPath()の説明へのリンクがあったのでそちらも読んでみましたが "search data path" が何のことを言っているのか分かりませんでした。 (https://docs.opencv.org/4.2.0/d6/dba/group__core__utils__samples.html#gae7a49fd5761f8abbe754993e328ea84f) 2と3の環境変数についてですが、Windowsでは環境変数を編集できるのは存じていますが、Macにもそのようなものがあるのでしょうか?
asiangeorge

2020/04/23 09:27

上記リンクページが環境変数の設定方法について、その前回記事が環境変数そのものについて分かりやすく書いてありました。 https://qiita.com/soarflat/items/09be6ab9cd91d366bf71 あまり理解できていませんが、このプログラムに関していうと、上記OpenCV公式ドキュメントの1〜3と5〜6は関係なさそう、4は結局実行ファイルの位置に依存するといったところでしょうか。 current working directoryは実行ファイルがあるところですか?それともmain.cppがあるところですか?
asiangeorge

2020/04/23 15:28

Terminalにコマンドを手打ちするときカレントディレクトリは自分がいるところというのはわかるのですが、IDE(私の場合CLion)のコンパイルボタン→実行ボタンで実行するとき、プログラム上でどのディレクトリがカレントディレクトリとして扱われるのでしょうか?
asiangeorge

2020/04/24 04:15

なるほどなるほど、ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問