当前位置: 首页 > news >正文

python常用脚本2——opencv读写中文路径

import cv2
import numpy as np
from PIL import Imagedef imread_cn(path: str, flags=cv2.IMREAD_COLOR):"""用 PIL 读含中文路径的图片,返回 OpenCV ndarray"""if path is None:raise ValueError('path 不能为 None')pil_img = Image.open(path)if pil_img.mode != 'RGB':pil_img = pil_img.convert('RGB')img = np.array(pil_img)if flags == cv2.IMREAD_GRAYSCALE:img = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)elif flags == cv2.IMREAD_COLOR:img = cv2.cvtColor(img, cv2.COLOR_RGB2BGR)return imgdef imwrite_cn(path: str, img: np.ndarray, params=None):"""把 OpenCV ndarray 用 PIL 保存到含中文路径"""if path is None or img is None:raise ValueError('path 和 img 都不能为 None')if not isinstance(img, np.ndarray):raise TypeError('img 必须是 numpy.ndarray')if len(img.shape) == 2:rgb = cv2.cvtColor(img, cv2.COLOR_GRAY2RGB)else:rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)pil_img = Image.fromarray(rgb)save_kwargs = {}if params and len(params) >= 2:key, val = params[0], params[1]if key == cv2.IMWRITE_JPEG_QUALITY:save_kwargs['quality'] = valelif key == cv2.IMWRITE_PNG_COMPRESSION:save_kwargs['compress_level'] = valpil_img.save(path, **save_kwargs)return Trueif __name__ == "__main__":# 1. 读取含中文路径的图片img = imread_cn(r'C:\测试\图片\小猫.png', cv2.IMREAD_COLOR)print('读入成功,shape =', img.shape)# 2. 随便做点 OpenCV 处理,例如转灰度+高斯模糊gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)blur = cv2.GaussianBlur(gray, (15, 15), 0)# 3. 把结果保存到新的中文路径save_ok = imwrite_cn(r'C:\测试\结果\模糊后.jpg', blur,[cv2.IMWRITE_JPEG_QUALITY, 90])print('保存成功' if save_ok else '保存失败')

总结:

        opencv读取和写入的时候如果遇到中文路径的问题,可以使用PIL读取或者写入图片,但是由于PIL需要的是RGB格式,而opencv需要的是BGR格式,所以用PIL读取之后需要转成BGR才能被opencv使用,而要想使用PIL写入opencv图片,则要将BGR格式的图片转为RGB。


文章转载自:

http://EIzHuLxA.dhckp.cn
http://dn6KkfSd.dhckp.cn
http://k9vmGFY4.dhckp.cn
http://X9DVHLSi.dhckp.cn
http://QlPczNgY.dhckp.cn
http://67xaMa3Z.dhckp.cn
http://5pnMZh4K.dhckp.cn
http://qI1gzKvz.dhckp.cn
http://l3JMwduY.dhckp.cn
http://fWDns39v.dhckp.cn
http://DceiEfnN.dhckp.cn
http://2SGEt85r.dhckp.cn
http://4Qe1TYYA.dhckp.cn
http://RkqdLo7F.dhckp.cn
http://0uQ6toje.dhckp.cn
http://zlsXeIhP.dhckp.cn
http://kCZohl7m.dhckp.cn
http://dj0l51sr.dhckp.cn
http://SPSqPohO.dhckp.cn
http://CeDJ1LJt.dhckp.cn
http://aYxEvqly.dhckp.cn
http://FZSy9mTG.dhckp.cn
http://vY2Jo1dV.dhckp.cn
http://jpbiUe9x.dhckp.cn
http://W5EGh9GN.dhckp.cn
http://Vc8iksrQ.dhckp.cn
http://nG3SNHVj.dhckp.cn
http://xK01FCan.dhckp.cn
http://5GGYLjjN.dhckp.cn
http://wEKsaJul.dhckp.cn
http://www.dtcms.com/a/363106.html

相关文章:

  • Java 中的抽象工厂设计模式​
  • Claude Code SDK 配置Gitlab MCP服务
  • 《多模态与 AIGC:最火的 AI 应用方向》
  • 线扫相机搭配显微镜:解锁微观世界的 “全景高清” 观察模式
  • [光学原理与应用-366]:ZEMAX - 用成像原理说明人眼为什么能看清物体?
  • Java面试实战系列【JVM篇】- JVM内存结构与运行时数据区详解(共享区域)
  • Java 垃圾回收机制(GC算法、GC收集器如G1、CMS)的必会知识点汇总
  • 企业级架构师综合能力项目案例二(项目性能优化方案JVM+数据库+缓存+代码JUC+消息中间件架构+服务熔断降级)
  • 【实时Linux实战系列】实时运动检测与分析系统
  • 鸿蒙NEXT界面交互全解析:弹出框、菜单、气泡提示与模态页面的实战指南
  • 基于FPGA+DSP数据采集平台DMA应用学习
  • 面经分享一:分布式环境下的事务难题:理论边界、实现路径与选型逻辑
  • 破解数字孪生落地难题的三大法宝:动态映射、模块架构与闭环验证
  • Java全栈SASS程序-设计多租户空间隔离架构
  • Cortex-M0 M3 M4的乘法与除法指令对比
  • Ceph PG scrub 流程
  • 图解设计模式
  • AbMole小课堂丨Trastuzumab:靶向 HER2 的多维作用机制及科研应用详解
  • 移动端富文本markdown中表格滚动与页面滚动的冲突处理:Touch 事件 + 鼠标滚轮精确控制方案
  • 亚信安全亮相鸿蒙生态大会2025 携手鸿蒙生态绘就万物智联新蓝图
  • 技术架构设计--资源与链接、安全灾备
  • 铝基板自动矫平机·再探:从“辊缝”到“微观”的幕后故事
  • SwinIR:基于 Swin Transformer 的图像复原新范式(附视频讲解)
  • 【C++】14. 多态
  • C++ 面试考点 类成员函数的调用时机
  • 服务器的监控和管理手段有哪些?
  • Zephyr如何注册设备实例
  • Android14 init.rc各个阶段的主要操作详解2
  • 【Qt】bug排查笔记——QMetaObject::invokeMethod: No such method
  • 面试_Mysql