OpenCV读取并保存中文路径图片指南

OpenCV读取并保存中文路径图片指南

一、需求分析

在Python中使用OpenCV处理图片时,涉及读取和保存图片的操作,可能会遇到中文路径的兼容性问题。该指南的目的是展示如何正确处理带有中文路径的图片,并使用OpenCV将图片保存到指定的中文路径下。

二、工具链(各种对象或函数)

2.1 cv2.imencode

语法:

python 复制代码
cv2.imencode(ext, img[, params])

参数解析:

  • ext:指定保存文件的格式,例如.jpg.png
  • img:待保存的图片数据(numpy数组)。
  • params:可选参数,用于设置图片的保存质量等属性。
  • 返回值:一个包含编码后的图片字节数据的元组(返回值为成功与否的布尔值和字节数据)。
2.2 numpy.tofile

语法:

python 复制代码
numpy.ndarray.tofile(fid, sep="", format="%s")

参数解析:

  • fid:保存的目标文件路径,可以是中文路径。
  • sep:分隔符。默认值为空,表示不使用分隔符。
  • format:保存数据的格式。
  • 返回值:无。直接将数组内容保存到指定路径。

三、实例

3.1 读取和保存带中文路径的图片
  • 代码:
python 复制代码
import cv2
import numpy as np

# 读取中文路径图片
img_path = r'中文路径/图片.jpg'
img = cv2.imdecode(np.fromfile(img_path, dtype=np.uint8), cv2.IMREAD_COLOR)

# 检查图片是否读取成功
if img is None:
    raise ValueError(f"无法读取图片:{img_path}")

# 保存图片到新的中文路径
save_path = r'中文路径/保存的图片.jpg'
cv2.imencode('.jpg', img)[1].tofile(save_path)
print(f"图片已保存至:{save_path}")
  • 代码解释:
    1. 使用np.fromfile来读取含中文路径的图片文件,并将其转化为字节数据,避免因路径编码问题导致的cv2.imread失败。
    2. 利用cv2.imdecode将读取的字节数据解码为OpenCV可处理的图像数据。
    3. 将读取的图片数据通过cv2.imencode编码后,利用tofile保存至中文路径,确保路径兼容性。
    4. cv2.imencode('.jpg', img)返回的是一个包含两个元素的元组,第一个元素是编码是否成功的布尔值,第二个元素是编码后的图像字节数据。

四、注意事项

  1. Python的cv2.imread可能无法直接处理中文路径,建议使用np.fromfile读取图片并通过cv2.imdecode解码。
  2. 保存图片时,直接使用cv2.imwrite也会遇到中文路径问题,使用cv2.imencode结合numpy.tofile来保存图片文件。
  3. 确保路径中的中文字符以r''的原始字符串格式传递,避免转义字符导致的路径错误。
相关推荐
jndingxin16 小时前
OpenCV图像注册模块
人工智能·opencv·计算机视觉
R-G-B16 小时前
【P14 3-6 】OpenCV Python——视频加载、摄像头调用、视频基本信息获取(宽、高、帧率、总帧数)
python·opencv·视频加载·摄像头调用·获取视频基本信息·获取视频帧率·获取视频帧数
荼蘼17 小时前
OpenCv(三)——图像平滑处理
人工智能·opencv·计算机视觉
R-G-B1 天前
OpenCV Python——报错AttributeError: module ‘cv2‘ has no attribute ‘bgsegm‘,解决办法
人工智能·python·opencv·opencv python·attributeerror·module ‘cv2‘·no attribute
似乎很简单1 天前
【opencv-Python学习笔记(5):几何变换】
笔记·opencv·学习
荼蘼2 天前
OpenCv(二)——边界填充、阈值处理
人工智能·opencv·计算机视觉
蜀中廖化2 天前
机器学习:基于OpenCV和Python的智能图像处理 实战
python·opencv·机器学习
R-G-B2 天前
【P27 4-8】OpenCV Python——Mat类、深拷贝(clone、copyTo、copy)、浅拷贝,原理讲解与示例代码
人工智能·python·opencv·浅拷贝·深拷贝·opencv python·mat类
星期天要睡觉2 天前
计算机视觉(opencv)实战三——图像运算、cv2.add()、cv2.addWeighted()
人工智能·opencv·计算机视觉
rhythmcc2 天前
【visual studio】visual studio配置环境opencv和onnxruntime
c++·人工智能·opencv