OpenCV imread не работает на Android

У меня есть проект 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 относительный путь? Если да, то относительно чего?

person Tim Autin    schedule 29.11.2016    source источник


Ответы (1)


Жаль, просто я не принял разрешение на хранение на телефоне Android 7 -_-

person Tim Autin    schedule 30.11.2016