【问题标题】:OpenCV imread with foreign charactersOpenCV 读取外来字符
【发布时间】: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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2016-09-04
    • 1970-01-01
    • 1970-01-01
    • 2011-09-08
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    • 2012-03-25
    • 1970-01-01
    相关资源
    最近更新 更多