OpenCV处理含中文路径图片的读写方案
OpenCV的imread函数不支持非ASCII字符路径,导致含中文的文件名无法直接读取。本文介绍了通过内存中转的解决方案:利用numpy将文件数据读入内存,再使用imdecode解码为图像;保存时则通过imencode编码后以tofile写入。该方法适用于Python及C++环境,有效解决中文路径读写问题。
OpenCV处理含中文路径图片的读写方案
读取图片
img_gt = cv2.imdecode(np.fromfile(path, dtype=np.uint8), -1)
img_gt = cv2.cvtColor(img_gt, cv2.IMREAD_COLOR)写入图片
write_path=f'{save_dir}/{imgname}.jpg'
cv2.imencode('.jpg', output)[1].tofile(write_path) # 保存图片C++版本
#include<iostream>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include "opencv2/imgproc.hpp"
#include "opencv2/imgcodecs.hpp"
#include <opencv2/highgui/highgui_c.h>
using namespace cv;
int main()
{
std::string image_path = samples::findFile("D:\\素材\\1.png");
Mat img = imread(image_path, IMREAD_COLOR);
imshow("src", img);//原图像
waitKey(0);
}
OpenCV的imread不支持中文路径问题
严格来说,这并非imread不支持中文,而是不支持非ASCII字符。因此,无论路径如何转换编码格式,通常都无法直接解决该问题。
解决思路是:先使用支持中文路径的其他API将图片数据加载到内存中,然后利用OpenCV从内存读取图片的方法,将数据解码为图像对象。
实现方式非常简单
import cv2
import numpy as np
def readimg(filename, mode):
raw_data = np.fromfile(filename, dtype=np.uint8) #先用numpy把图片文件存入内存:raw_data,把图片数据看做是纯字节数据
img = cv2.imdecode(raw_data, mode) #从内存数据读入图片
return img该函数可以替代OpenCV的imread,并且支持中文路径。
以上为个人经验总结,希望能为大家提供参考,也希望大家多多支持本站。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













