Vya*_*lav 11 c++ unicode winapi qt opencv
我们有一个OpenCV问题,即在Windows上打开(和写入)包含非Ascii字符的文件路径.我看到OpenCV imread with foreign characters和imread(openCV),QString unicodes,但仍然不理解解决问题的正确方法.
就像我在OpenCV源代码中看到的那样,它甚至在Windows上使用fopen(而不是_wfopen),并且afaik fopen在Windows上不处理非ascii字符.从上面的问题我看到可能有一些使用QStrings的技巧,但如果它的工作原理是什么呢?它如何将unicode字符串转换为Windows'fopen()接受的字符数组?
PS我们不使用QT
提前致谢!
小智 5
尝试这个:
cv::Mat ReadImage(const wchar_t* filename)
{
FILE* fp = _wfopen(filename, L"rb");
if (!fp)
{
return Mat::zeros(1, 1, CV_8U);
}
fseek(fp, 0, SEEK_END);
long sz = ftell(fp);
char* buf = new char[sz];
fseek(fp, 0, SEEK_SET);
long n = fread(buf, 1, sz, fp);
_InputArray arr(buf, sz);
Mat img = imdecode(arr, CV_LOAD_IMAGE_COLOR);
delete[] buf;
fclose(fp);
return img;
}
Run Code Online (Sandbox Code Playgroud)