Opencv函数和宽字符串

时间:2016-03-31 01:08:15

标签: c++ opencv widestring

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并使用别的东西?

2 个答案:

答案 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));