Android で使用する必要がある OpenCV を使用する C++ プロジェクトがあります。簡単にするために、これがプロジェクト コードであるとしましょう。
Test.h:
#include <iostream>
class Test
{
public:
Test();
~Test();
static std::string getTest(std::string filePath);
};
Test.cpp:
#include "opencv2/imgcodecs.hpp"
#include "Test.h"
using namespace cv;
std::string Test::getSize(std::string filePath)
{
Mat image = imread(filePath, 1);
std::stringstream stringStream;
if(image.empty())
{
stringStream << "Error loading image at path: " << filePath;
std::string error = stringStream.str();
return error;
}
stringStream << "Image size: " << image.rows << " * " << image.cols;
std::string result = stringStream.str();
return result;
}
JNI バインディングを作成し、Android.mk をセットアップしてコンパイルしましたが、imread メソッドが機能しません。画像が空です (image.empty() テストが true)。
ここで何が問題なのですか?ファイルが存在することを確認したので、次のいずれかであると思います。
- 権限の問題 (外部ストレージの読み取り/書き込み権限を追加しましたが、下位レベルの問題である可能性があります)
- ファイルパスの問題。絶対ファイル パス ("/storage/emulated/0/test.jpg" など) を指定しました。OpenCVは相対パスを期待していますか? もしそうなら、何に対して?