前提・実現したいこと
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()
を使う方法を検討しています。
よろしくお願いします。
あなたの回答
tips
プレビュー