0

Opencvcv::imread()take as arguments这样的函数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并使用其他东西?

4

2 回答 2

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);
于 2018-01-03T14:24:44.370 回答
0

当前的答案是NO ,正如官方 OpenCV repo 的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));
于 2016-03-31T02:09:42.483 回答