【OpenCV 入门到精通 03】图像入门读取、显示、保存完全指南标签OpenCVimreadimshowimwrite图像读写Mat难度⭐ 入门 |阅读时长约 50 分钟 |系列第 03/12 集前置02 环境安装 |下一集04 视频与绘图写在前面图像处理的第一步把图片读进内存、显示出来、保存出去。对应官方文档 2_1 图像入门。本集覆盖imread/imshow/imwrite三大核心函数以及像素访问、图像属性等基础操作。本集学习目标熟练使用 imread / imshow / imwrite理解图像属性shape、dtype、size掌握像素级访问与修改处理中文路径和多种图像格式目录3.1 读取图像 imread3.2 显示图像 imshow3.3 保存图像 imwrite3.4 图像属性3.5 像素访问3.6 踩坑指南3.7 FAQ3.8 本集小结3.1 读取图像 imreadimportcv2 imgcv2.imread(photo.jpg)# 默认彩色 BGRgraycv2.imread(photo.jpg,0)# 灰度graycv2.imread(photo.jpg,cv2.IMREAD_GRAYSCALE)rgbacv2.imread(photo.png,cv2.IMREAD_UNCHANGED)# 含 Alphaimread 标志位标志值说明IMREAD_COLOR1彩色 BGR默认IMREAD_GRAYSCALE0灰度单通道IMREAD_UNCHANGED-1含 Alpha 通道检查是否读取成功imgcv2.imread(photo.jpg)ifimgisNone:print(读取失败检查1.路径 2.格式 3.中文路径)else:print(f成功:{img.shape})3.2 显示图像 imshowcv2.imshow(窗口标题,img)keycv2.waitKey(0)# 0无限等待30等待30mscv2.destroyAllWindows()# 按 q 退出whileTrue:cv2.imshow(img,img)ifcv2.waitKey(1)0xFFord(q):breakcv2.destroyAllWindows()函数说明imshow(name, mat)创建/更新窗口waitKey(delay)等待按键返回键值destroyAllWindows()关闭所有窗口namedWindow(name, flags)创建可调整大小的窗口cv2.namedWindow(img,cv2.WINDOW_NORMAL)# 可拖拽缩放cv2.imshow(img,img)3.3 保存图像 imwritecv2.imwrite(output.jpg,img)# JPEGcv2.imwrite(output.png,img)# PNG无损cv2.imwrite(output.jpg,img,[cv2.IMWRITE_JPEG_QUALITY,95])支持格式格式扩展名特点JPEG.jpg .jpeg有损压缩体积小PNG.png无损支持透明BMP.bmp无压缩体积大TIFF.tiff科研常用WebP.webp新格式高压缩比3.4 图像属性imgcv2.imread(photo.jpg)print(img.shape)# (高, 宽, 通道) 如 (480, 640, 3)print(img.dtype)# uint8print(img.size)# 总像素数 H*W*Cprint(img.ndim)# 维度数灰度2彩色3h,wimg.shape[:2]print(f宽{w}, 高{h})属性灰度图彩色图shape(H, W)(H, W, 3)dtypeuint8uint8单像素大小1 字节3 字节3.5 像素访问与修改访问单个像素# 彩色返回 [B, G, R]pximg[100,200]b,g,rimg[100,200]print(fB{b}, G{g}, R{r})# 灰度graycv2.cvtColor(img,cv2.COLOR_BGR2GRAY)valgray[100,200]修改像素# 画一个红色方块 (BGR: 0,0,255)img[50:100,50:100][0,0,255]推荐numpy 切片操作区域roiimg[100:200,150:250]# 区域 of interestroi[:](0,255,0)# 整个区域变绿3.6 踩坑指南坑解决imread 返回 None检查路径中文路径用 imdecode颜色不对偏蓝/偏红OpenCV 是 BGR显示前转 RGBimshow 闪退必须配合 waitKeyJPEG 保存质量差设置 IMWRITE_JPEG_QUALITYshape 宽高搞反shape 是 (高, 宽)不是 (宽, 高)BGR → RGB 显示importcv2importmatplotlib.pyplotasplt imgcv2.imread(photo.jpg)rgbcv2.cvtColor(img,cv2.COLOR_BGR2RGB)plt.imshow(rgb)plt.show()3.7 常见问题 FAQQ1一张 4K 图占多少内存A3840×2160×3 ≈ 24 MBuint8Q2能直接修改 imread 返回的数组吗A能OpenCV 图像就是 NumPy 数组原地修改。3.8 本集小结操作函数读取cv2.imread(path, flags)显示cv2.imshow()cv2.waitKey()保存cv2.imwrite(path, img)属性.shape.dtype.size像素img[y, x]或img[y1:y2, x1:x2]← 第02集第04集视频与绘图 →参考2_1 图像入门