J'ai un projet C++ utilisant OpenCV que j'ai besoin d'utiliser sur Android. Pour simplifier, disons que c'est le code du projet:OpenCV imread ne fonctionne pas sur Android
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;
}
J'ai écrit mes liaisons JNI et mettre en place ma Android.mk et il compile, mais la méthode imread ne fonctionne pas: l'image est vide (le test image.empty() est vrai).
Qu'est-ce qui ne va pas ici? J'ai vérifié que le fichier existe, donc je suppose qu'il est soit:
- un problème d'autorisation (j'ai ajouté la lecture/écriture des autorisations de stockage externes, mais il peut y avoir des problèmes de niveau inférieur)
- un problème de chemin du fichier . J'ai fourni un chemin de fichier absolu (comme "/storage/emulated/0/test.jpg"). Est-ce que OpenCV attend un chemin relatif? Si oui, par rapport à quoi?