【发布时间】:2013-11-22 15:38:52
【问题描述】:
我们正在开发一个在 C++ 中使用 OpenCV 2.4.6 和 Qt 5.1.1 的项目。我们必须在代码中的几个点加载图像以进行图像处理,我们照常使用cv::imread。但是,我们想让软件与其他语言文件系统兼容,发现文件路径带有外来字符会无法加载。
我们认为,问题与 imread 只能接收 std::string(或 char*)这一事实有关,并将非拉丁 1 符号的路径转换为 std::string 结果在 UTF-8 中使用多个字节的字符(QString 使用的编码,这是我们存储路径的方式)被转换为多个字符。
为了确认文件路径有效,我们通过将wstring 传递给常规ifstream 来打开它们,这会成功打开文件并读取位。我们当前的技巧是将图像加载为QImage,然后将数据复制到cv::Mat,但这不是一个令人满意的解决方案,原因有很多,主要是我们理解Qt::QImage将图像加载到8bit 格式,我们的图像具有更高的位深度。
有什么“干净”的方法可以解决这个问题吗?我看到了this 问题,但toAscii 已被弃用,它的替代品对我们不起作用。我们尝试了以下方法将QString 转换为std::string 并将它们传递给imread。
QString::toStdString()、QString::toUtf8().data()、QString::toLocal8Bit().data()、QString::toLatin1().data()。它们似乎都产生了大致相同的结果。
提前致谢。
【问题讨论】:
标签: c++ qt opencv utf-8 wstring