我们正在使用C ++中的OpenCV 2.4.6和Qt 5.1.1开展项目。我们必须在代码中的几个点加载图像以进行图像处理,我们正常使用cv::imread
进行处理。但是,我们希望使软件与其他语言文件系统兼容,并发现具有外来字符的文件路径将无法加载。
我们认为,问题与imread
只能接受std::string
(或char*
)并使用非Latin-1符号的路径这一事实有关到std::string
导致使用UTF-8中的多个字节的字符(用于QString
的编码,这是我们存储路径的方式)被转换为多个字符。
要确认文件路径是有效的,我们通过将wstring
传递给常规ifstream
来打开它们,这会成功打开文件并读取位。我们当前的hack是将图像加载为QImage
然后将数据复制到cv::Mat
,但这不是一个令人满意的解决方案,原因有很多,主要是因为我们理解它,{{ 1}}以8位格式加载图像,我们的图像具有更高的位深度。
有没有“干净”的方式解决这个问题?我看到了this个问题,但Qt::QImage
已被弃用,其替代品对我们无效。我们尝试了以下将toAscii
转换为QString
并将其传递给std::string
的方法。
imread
,QString::toStdString()
,QString::toUtf8().data()
,QString::toLocal8Bit().data()
。它们似乎都产生了大致相同的结果。
提前致谢。
答案 0 :(得分:1)
您可以尝试QString::toStdWString()
,然后将生成的std::wstring
转换为std::string
。