2016-03-31 57 views
0

Opencvのような関数は、cv::imread()のように引数を取りますstrings。だから、私が書く場合:Opencv関数とワイド文字列

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

公式OpenCVのレポのIssue #4292で説明したように、現在の答えは、NOです。今ブーストおよびメモリマップドファイルを使用するための

一つの可能​​な回避策:

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