2

我们正在开发一个在 C++ 中使用 OpenCV 2.4.6 和 Qt 5.1.1 的项目。我们必须在我们的代码中的几个点加载图像以进行图像处理,我们cv::imread照常使用 。但是,我们想让软件与其他语言文件系统兼容,发现文件路径带有外来字符会无法加载。

imread我们认为,问题与只能接受 a std::string(or )的事实有关char*,并且将带有非 Latin-1 符号的路径转换为 ​​astd::string会导致字符在 UTF-8 中使用多个字节(用于QString,这是我们存储路径的方式)被转换为多个字符。

为了确认文件路径是有效的,我们通过将 a 传递wstring给一个正则来打开它们ifstream,它成功地打开文件并读取位。我们目前的 hack 是将图像加载为 a QImage,然后将数据复制到 a cv::Mat,但这不是一个令人满意的解决方案,原因有多种,主要是据我们理解,Qt::QImage加载 8bit 格式的图像,而我们的图像是 a更高的位深度。

有什么“干净”的方法可以解决这个问题吗?我看到了这个问题,但toAscii已被弃用,它的替代品对我们不起作用。我们尝试了以下将 转换QString为 astd::string并将它们传递给imread.

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

提前致谢。

4

1 回答 1

1

您可以尝试QString::toStdWString()然后将结果转换std::wstringstd::string.

于 2013-11-12T09:29:44.907 回答