opencv中文路径问题

目的

在windows系统上,就是直接用QT的utf8编码作为图片路径用在opencv读取或者写入函数,在路径当中含有中文时,会提示编码错误。

就是解决opencv中的中文路径的问题。

情况

代码如下:

cpp 复制代码
#pragma execution_character_set("utf-8")
#include <QApplication>
#include <QDebug>
#include <opencv2/opencv.hpp>
using namespace cv;
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    //MainWindow w;
    //w.show();
    //QString str = QString::fromUtf8("E:\\temp\\lushanjing3.jpg");
    QString str = QString::fromUtf8("E:\\temp\\图片\\lushanjing2.jpg");
    qDebug()<<str;
    Mat img = imread(str.toStdString());//图片路径
    //处理前
    imshow("img",img);//显示图片
    //Mat resimg;
    //高斯模糊
    //cv::GaussianBlur(img,resimg,Size(5,5),0);
    //imshow("resimg",resimg);//显示图片
    waitKey(2000);//等待按键
    return a.exec();
}

运行情况:

cpp 复制代码
17:21:01: Starting E:\project2023\example\openCv1\build-openCv1-Desktop_Qt_5_11_3_MSVC2015_64bit-Release\release\openCv1...
"E:\\temp\\图片\\lushanjing2.jpg"
[ WARN:0@0.071] global E:\openSource\opencv4.5\opencv-4.5.5\modules\imgcodecs\src\loadsave.cpp (239) cv::findDecoder imread_('E:\temp\鍥剧墖\lushanjing2.jpg'): can't open/read file: check file path/integrity
1127, FromFilemap
OpenCV: terminate handler is called! The last OpenCV error is:
OpenCV(4.5.5) Error: Assertion failed (!_src.empty()) in cv::cvtColor, file E:\openSource\opencv4.5\opencv-4.5.5\modules\imgproc\src\color.cpp, line 182
17:21:02: 程序异常结束。
17:21:02: The process was ended forcefully.

这个问题就是中文路径的问题。

如何解决呢?

在Qt中使用OpenCV打开含有中文路径的图片时,可能会遇到编码问题。这是因为Qt默认使用的是UTF-8编码,而Windows系统中路径字符串通常使用的是GBK或其他编码。

为了解决这个问题,可以在打开文件前将中文路径转换为OpenCV可以理解的编码格式。

代码更改如下:

cpp 复制代码
//#include "mainwindow.h"
#pragma execution_character_set("utf-8")
#include <QApplication>
#include <QDebug>
#include <opencv2/opencv.hpp>
using namespace cv;
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    //MainWindow w;
    //w.show();
    //QString str = QString::fromUtf8("E:\\temp\\lushanjing3.jpg");
    QString str = QString::fromUtf8("E:\\temp\\图片\\lushanjing2.jpg");
    //QString str = QString::fromLocal8Bit("E:\\temp\\图片\\lushanjing2.jpg");
    qDebug()<<str;
    Mat img = imread(str.toLocal8Bit().toStdString());//图片路径
    //处理前
    imshow("img",img);//显示图片
    //Mat resimg;
    //高斯模糊
    //cv::GaussianBlur(img,resimg,Size(5,5),0);
    //imshow("resimg",resimg);//显示图片
    waitKey(2000);//等待按键
    return a.exec();
}

运行情况如下:

显然是可以成功运行的。

总结

其关键在于用了toLocal8Bit()的编码转化,这一个函数的解释如下:

以QByteArray形式返回字符串的本地8位表示形式。如果字符串包含本地8位编码不支持的字符,则返回的字节数组是未定义的。

简单来说就是,以转化为以本地编码的字符串,显然适应了当前的要求:

相关推荐
Dfreedom.几秒前
开运算与闭运算:图像形态学中的“清道夫”与“修复匠”
图像处理·python·opencv·开运算·闭运算
测试者家园1 分钟前
测试用例智能生成:是效率革命,还是“垃圾进,垃圾出”的新挑战?
人工智能·职场和发展·测试用例·测试策略·质量效能·智能化测试·用例设计
GIS瞧葩菜1 分钟前
Cesium 轴拖拽 + 旋转圈拖拽 核心数学知识
人工智能·算法·机器学习
njsgcs4 分钟前
dqn和cnn有什么区别 dqn怎么保存训练经验到本地
人工智能·神经网络·cnn
AndrewHZ12 分钟前
【AI黑话日日新】什么是AI智能体?
人工智能·算法·语言模型·大模型·llm·ai智能体
cd_9492172130 分钟前
九昆仑低碳科技:所罗门群岛全国森林碳汇项目开发合作白皮书
大数据·人工智能·科技
工程师老罗33 分钟前
目标检测数据标注的工具与使用方法
人工智能·目标检测·计算机视觉
yuankoudaodaokou34 分钟前
高校科研新利器:思看科技三维扫描仪助力精密研究
人工智能·python·科技
Acrelhuang39 分钟前
工商业用电成本高?安科瑞液冷储能一体机一站式解供能难题-安科瑞黄安南
大数据·开发语言·人工智能·物联网·安全
小王毕业啦40 分钟前
2010-2024年 非常规高技能劳动力(+文献)
大数据·人工智能·数据挖掘·数据分析·数据统计·社科数据·经管数据