我有一个使用 OpenCV 的 C++ 项目,需要在 Android 上使用。为了简化,假设这是项目代码:
测试.h:
#include <iostream>
class Test
{
public:
Test();
~Test();
static std::string getTest(std::string filePath);
};
测试.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() 测试为真)。
这里有什么问题?我检查了该文件是否存在,所以我猜它是:
- 权限问题(我添加了读/写外部存储权限,但可能是较低级别的问题)
- 文件路径问题。我提供了一个绝对文件路径(如“/storage/emulated/0/test.jpg”)。OpenCV 是否需要相对路径?如果是这样,相对于什么?