OpenCV处理含中文路径图片的读写方案

今天早睡
今天早睡
发布时间:2026-10-16 | 3人浏览过
原创

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,并且支持中文路径。

以上为个人经验总结,希望能为大家提供参考,也希望大家多多支持本站。

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表