目录
- 2.1 本章学习目标
- 2.2 图像读取 imread
- 2.2.1 基本语法
- 2.2.2 标准读取代码(带判错)
- 2.2.3 opencv坑点
- 2.3 图像显示 imshow 与窗口控制
- 2.3.1 完整显示代码
- 2.3.2 waitKey() 函数参数详解与实战用法
- 2.3.3 可自由缩放窗口
- 2.4 图像保存 imwrite
- 2.5 图像 shape 与像素原理
- 2.6 像素读取与像素修改
- 2.6.1 读取单个像素
- 2.6.2 修改像素颜色
- 2.7 本章总结
2.1 本章学习目标
上一章我们了解了计算机视觉的基本概念、图像的数字化原理,并成功搭建 OpenCV 开发环境。本章开始正式进入实战,掌握 OpenCV 最核心、最基础的图像操作。
学完本章你将掌握:
- 图片读取、显示、保存的标准代码写法
- 解决新手高频报错:路径问题、图片读空问题
- 理解图像 shape 结构:高度、宽度、通道数
- 手动读取、修改图像像素,真正理解"图像是数字矩阵"
2.2 图像读取 imread
在 OpenCV 中,我们通过cv2.imread()函数完成图像读取操作,这是所有计算机视觉实战任务的起始步骤。图像在计算机中并非可视画面,而是以多维数字数组的形式存储,彩色图像本质为三维数组,后续所有图像处理操作,都是对该数组数据的运算与修改。
2.2.1 基本语法
cv2.imread(filename, flags)filename:文件路径,尽量避免带有中文的路径,opencv对于中文路径可能无法读取
flags:读取模式
flags常用读取模式:
- cv2.IMREAD_COLOR:默认,读取彩色图,忽略透明度
- cv2.IMREAD_GRAYSCALE:以灰度模式读取
- cv2.IMREAD_UNCHANGED:完整读取,包含透明通道
- flags = 0 也是以灰度模式读取
2.2.2 标准读取代码(带判错)
新手最常见问题:图片路径错误导致读取为空,程序不报错但无法显示。所以加判空判断。不是非必须,容易检查代码错误。
import cv2 # 读取图片,r 防止转义字符报错 #以彩色模式读取 img = cv2.imread(r"D:\pythoncode2\bigdata_ai40\Image\qie.png", cv2.IMREAD_COLOR) #判空:防止路径错误、图片不存在 if img is None: print("图片读取失败,请检查路径是否正确!") else: print("图片读取成功") print("图像形状:", img.shape)2.2.3 opencv坑点
- 路径不要中文、不要空格,极易读空
- Windows 路径加 r,避免 \ 被当成转义字符
- OpenCV 读取彩色图是三维数组,默认是BGR 通道,不是 RGB!
2.3 图像显示 imshow 与窗口控制
读取图片后,使用cv2.imshow()展示图像,配合 waitKey 和 destroyAllWindows 完成窗口控制,可以显示多个窗口。
函数语法:cv2.imshow(winname, mat)
winname(窗口名称):字符串类型,用于自定义显示窗口的唯一标识,建议使用英文、数字命名,禁止使用中文、特殊符号和空格。
mat(图像矩阵):数组类型,传入通过cv2.imread()读取成功的图像数组对象,是需要可视化展示的目标图像。
重点避坑:窗口名称严禁使用中文。OpenCV底层对中文窗口名兼容性极差,使用中文会出现窗口乱码、显示异常,甚至程序闪退、运行报错等问题,统一使用英文、数字命名窗口即可。
2.3.1 完整显示代码
import cv2 img = cv2.imread(r"D:\pythoncode2\bigdata_ai40\Image\qie.png") if img is not None: #创建窗口并显示图片 cv2.imshow("picture", img) waitKey(0):无限等待,按任意键关闭窗口 cv2.waitKey(0) #关闭所有窗口,释放内存 cv2.destroyAllWindows()2.3.2 waitKey() 函数参数详解与实战用法
cv2.waitKey()是 OpenCV 专属键盘监听函数,用于控制图像窗口的停留时间,是图像显示必不可少的配套函数,无该函数窗口会瞬间闪退。函数返回值为按键对应的ASCII码数值,可实现自定义按键交互逻辑。
- waitKey(0)|无限等待模式(调试首选)
程序持续阻塞、窗口一直停留,按下任意键盘按键即可关闭窗口,适配日常代码调试、效果查看场景。
- waitKey(delay)|定时关闭模式
传入正整数代表毫秒数,如waitKey(2000)表示窗口停留2秒,无按键操作则自动关闭窗口。
- 自定义按键关闭窗口(进阶实战)
利用函数返回的ASCII码,可指定专属按键关闭窗口,精准控制程序逻辑,避免任意按键误触发关闭。
waitKey(60) =ASCII码
- 窗口生效规则
该函数仅对当前激活的最新窗口生效,默认监听并关闭最后展示的图像窗口,多窗口场景下需注意监听顺序。
2.3.3 可自由缩放窗口
默认窗口大小固定,如需拖拽缩放,可创建可调节窗口:
cv2.namedWindow("picture", cv2.WINDOW_NORMAL) cv2.imshow("picture", img)2.4 图像保存 imwrite
使用cv2.imwrite()可以将处理后的图片保存到本地,支持 jpg、png 格式互转。
import cv2 img = cv2.imread(r"D:\pythoncode2\bigdata_ai40\Image\qie.png") if img is not None: #保存图片 res = cv2.imwrite(r"D:\pythoncode2\save.png", img) if res: print("图片保存成功!")2.5 图像 shape 与像素原理
第一章我们知道:图片就是数字矩阵,矩阵的话,可以理解为,嵌套列表,现在通过代码直观理解。
打印 img.shape 会得到三元组:(高度, 宽度, 通道数)
- 高度 height:图片有多少行像素
- 宽度 width:图片有多少列像素
- 通道 channel:彩色图3通道,灰度图1通道
超级重点:先高后宽,和我们平时"宽×高"相反,90%新手会搞错!
2.6 像素读取与像素修改
图像本质是数组,我们可以直接通过坐标修改像素颜色。
2.6.1 读取单个像素
import cv2 img = cv2.imread(r"D:\pythoncode2\bigdata_ai40\Image\企鹅.png") #获取坐标 (100,100) 的像素值 pixel = img[100, 100] print("像素值(BGR):", pixel)2.6.2 修改像素颜色
我们将图片某一坐标像素改为白色 (255,255,255):
用切片更改某一区域像素值
import cv2 img = cv2.imread(r"D:\pythoncode2\bigdata_ai40\Image\企鹅.png") #修改单个像素为白色 img[100, 100] = [255, 255, 255] #修改一片区域为黑色 #切片,某一区域 img[200:300, 200:300] = [0, 0, 0] cv2.imshow("change", img) cv2.waitKey(0) cv2.destroyAllWindows()通过像素修改,我们可以直观验证:改变矩阵数值 = 改变图像画面。
2.7 本章总结
本章彻底打通了计算机视觉最底层的图像操作逻辑,是后续所有图像处理、特征检测、目标识别的基础。
核心知识点回顾:
- 掌握 imread、imshow、imwrite 三大基础操作
- 学会判空、路径避坑、窗口控制
- 理解 shape 顺序:(高度, 宽度, 通道)
- 能够手动读取、修改像素,真正理解图像数字化原理