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''的原始字符串格式传递,避免转义字符导致的路径错误。
相关推荐
jghhh012 小时前
基于阈值分割的车牌定位识别
图像处理·opencv·计算机视觉
陈天伟教授1 天前
人工智能训练师认证教程(4)OpenCV 快速实践
人工智能·python·神经网络·opencv·机器学习·计算机视觉
百***78751 天前
【技术教程】3步极速接入GPT-5.1:零门槛体验多模态AI能力
android·java·人工智能·gpt·opencv
劈星斩月1 天前
OpenCV 学习10-边缘检测(Edge Detection)
opencv·边缘检测
骄傲的心别枯萎2 天前
RV1126 NO.57:ROCKX+RV1126人脸识别推流项目之读取人脸图片并把特征值保存到sqlite3数据库
数据库·opencv·计算机视觉·sqlite·音视频·rv1126
中年程序员一枚2 天前
cv2.sqrBoxFilter 是 OpenCV 中用于计算像素邻域平方和的盒式滤波函数
人工智能·opencv·计算机视觉
棒棒的皮皮2 天前
【OpenCV】Python图像处理之平滑处理
图像处理·python·opencv·计算机视觉
棒棒的皮皮2 天前
【OpenCV】Python图像处理之重映射
图像处理·python·opencv·计算机视觉
中年程序员一枚2 天前
cv2.blur 是 OpenCV 中实现均值滤波(归一化盒式滤波) 的核心函数
人工智能·opencv·均值算法
技术净胜3 天前
MATLAB进行图像分割从基础阈值到高级分割
opencv·计算机视觉·matlab