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
и использовать что-то еще?
Текущий ответ НЕТ, как обсуждалось в Выпуск № 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));
Можно записывать / читать изображения в / из путей 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);