我们正在开发一个在 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()
. 它们似乎都产生了大致相同的结果。
提前致谢。