OpenCV imread与外国字符

时间:2013-11-10 22:36:33

标签: c++ qt opencv utf-8 wstring

我们正在使用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的方法。

imreadQString::toStdString()QString::toUtf8().data()QString::toLocal8Bit().data()。它们似乎都产生了大致相同的结果。

提前致谢。

1 个答案:

答案 0 :(得分:1)

您可以尝试QString::toStdWString(),然后将生成的std::wstring转换为std::string