Opencv
这样的{p} 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 :(得分:1)
可以使用std的文件流和OpenCV的imdecode和imencode在wstring路径中写入/读取图像。
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 :(得分:0)
目前的答案是 否 ,正如官方OpenCV回购的Issue #4292中所述。
现在使用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));