У меня есть проект C++ с использованием OpenCV, который мне нужно использовать на Android. Для упрощения скажем, что это код проекта:
Тест.ч:
#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 относительный путь? Если да, то относительно чего?