Функции OpenCV и широкие строки

Opencv функции как cv::imread() принимать только в качестве аргументов strings, Итак, если я напишу:

cv::Mat image = cv::imread("C:\\folder\\image.jpg");

все хорошо, и он будет загружать изображение. Но, если путь содержит широкие символы (например, греческие буквы):

wstring path = L"C:\\folder\\εικονα.jpg";

Я не могу просто написать:

cv::Mat image = cv::imread( path );

Я уже пробовал (и, очевидно, не удалось) это:

cv::Mat image = cv::imread( string(path.begin(), path.end()) );

Есть ли решение? Или мне просто нужно уйти opencv и использовать что-то еще?

0

Решение

Текущий ответ НЕТ, как обсуждалось в Выпуск № 4292 официального репозитория OpenCV.

Один из возможных обходных путей на данный момент с использованием Boost и файла с отображенной памятью:

mapped_file map(path(L"filename"), ios::in);
Mat file(1, numeric_cast<int>(map.size()), CV_8S, const_cast<char*>(map.const_data()), CV_AUTOSTEP);
Mat image(imdecode(file, 1));
0

Другие решения

Можно записывать / читать изображения в / из путей wstring, используя файловые потоки std, а также imdecode и imencode OpenCV.

    wstring path = getPath();
size_t size = getFileSize(path);
vector<uchar> buffer(size);

ifstream ifs(path, ios::in | ios::binary);
ifs.read(reinterpret_cast<char*>(&buffer[0]), size);

Mat image = imdecode(buffer, flags);
1

По вопросам рекламы [email protected]