gpt4 book ai didi

c++ - OpenCV imread 外来字符

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:25:33 31 4
gpt4 key购买 nike

我们正在开发一个使用 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,但这不是一个令人满意的解决方案,原因有多种,主要是我们理解,Qt::QImage 以 8 位格式加载图像,我们的图像具有更高的位深度。

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

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

提前致谢。

最佳答案

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

关于c++ - OpenCV imread 外来字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19896142/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com