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

第五节:图像基本操作-图像读取、显示与保存

一、OpenCV简介与环境配置

OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉库,自1999年由Intel发起以来,已成为图像处理领域的行业标准。它支持C++、Python、Java等多种编程语言,本文将以Python语言为例演示基础操作。

1.1 安装OpenCV

Python环境下安装命令:

pip install opencv-python

验证安装:

import cv2
print(cv2.__version__)  # 应输出4.x.x版本号

1.2 开发环境准备

推荐使用以下组合:

  • Python 3.8+

  • Jupyter Notebook或PyCharm

  • NumPy库(OpenCV依赖)

二、图像读取操作

2.1 基本读取方法

import cv2# 读取图像文件
img = cv2.imread("image.jpg")

注意事项:

  • 文件路径需正确(建议使用绝对路径)

  • 支持格式:JPEG、PNG、BMP等20+种格式

  • 失败时返回None,不会报错

2.2 读取模式参数

# 读取为灰度图像
gray_img = cv2.imread("image.jpg", cv2.IMREAD_GRAYSCALE)# 包含Alpha通道(透明层)
img_with_alpha = cv2.imread("image.png", cv2.IMREAD_UNCHANGED)

常用模式参数:

参数说明
IMREAD_COLOR1默认BGR三通道(非RGB!)
IMREAD_GRAYSCALE0单通道灰度图
IMREAD_UNCHANGED-1包含Alpha通道

2.3 异常处理实践

import systry:img = cv2.imread("image.jpg")if img is None:raise FileNotFoundError
except:print("图像读取失败!")sys.exit()

三、图像显示技术

3.1 基础显示方法

cv2.imshow("Image Window", img)
cv2.waitKey(0)  # 等待任意按键
cv2.destroyAllWindows()

关键要点:

  • 窗口名称需唯一

  • waitKey()控制显示时长(毫秒)

  • 必须调用destroyAllWindows()释放资源

3.2 多窗口显示

cv2.imshow("Original", img)
cv2.imshow("Grayscale", gray_img)
cv2.waitKey(3000)  # 显示3秒
cv2.destroyAllWindows()

3.3 窗口控制技巧

调整窗口尺寸:

cv2.namedWindow("Resizable", cv2.WINDOW_NORMAL)
cv2.resizeWindow("Resizable", 800, 600)
cv2.imshow("Resizable", img)

四、图像保存操作

4.1 基本保存方法

cv2.imwrite("output.jpg", img)

4.2 格式参数详解

JPEG质量参数(0-100):

cv2.imwrite("high_quality.jpg", img, [cv2.IMWRITE_JPEG_QUALITY, 95])

PNG压缩级别(0-9):

cv2.imwrite("compressed.png", img, [cv2.IMWRITE_PNG_COMPRESSION, 5])

4.3 格式转换示例

BGR转RGB保存:

rgb_img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
cv2.imwrite("rgb_format.jpg", rgb_img)

五、综合应用实例

5.1 完整流程示例

import cv2# 读取图像
img = cv2.imread("input.jpg")# 转换为灰度图
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# 显示双视图
cv2.imshow("Original", img)
cv2.imshow("Grayscale", gray)
cv2.waitKey(2000)# 保存结果
cv2.imwrite("gray_output.jpg", gray)
cv2.destroyAllWindows()

5.2 图像属性获取

print("图像尺寸:", img.shape)  # (height, width, channels)
print("数据类型:", img.dtype)  # uint8
print("像素总数:", img.size)

六、常见问题解决方案

6.1 路径错误问题

典型报错:

img = cv2.imread("错误路径/image.jpg")
# 无报错但返回None

解决方案:

import os
print(os.path.exists("image.jpg"))  # 验证路径

6.2 窗口闪退问题

现象:窗口瞬间关闭
解决方法:

cv2.waitKey(5000)  # 延长显示时间
# 或使用带事件循环的结构

七、核心原理剖析

7.1 图像存储原理

  • 三通道BGR排列(非RGB)

  • 存储结构:Height × Width × Channels

  • 数据类型:uint8(0-255)

7.2 颜色空间差异

OpenCV默认使用BGR的历史原因:

  • 早期Camera厂商的常用格式

  • 与RGB排列顺序不同需特别注意

    八、扩展应用方向

    8.1 视频流处理基础

    cap = cv2.VideoCapture(0)  # 打开摄像头while True:ret, frame = cap.read()cv2.imshow("Live", frame)if cv2.waitKey(1) == ord('q'):breakcap.release()
    cv2.destroyAllWindows()

  • 8.2 图像处理流水线

    典型处理流程:

  1. 读取原始图像

  2. 颜色空间转换

  3. 应用滤镜/算法

  4. 输出处理结果

    九、最佳实践建议

掌握这些基础操作后,读者可以继续学习更高级的图像处理技术,如图像滤波、特征检测、目标识别等。OpenCV的强大功能将随着学习的深入逐步展现,建议通过实际项目实践来巩固这些基础知识。

  • 统一使用绝对路径

  • 及时释放窗口资源

  • 重要数据添加异常处理

  • 注意BGR与RGB的转换

    十、总结

  • 本文详细讲解了使用OpenCV进行图像处理的三大基础操作:

  • 图像读取:多种模式选择与异常处理

  • 图像显示:窗口控制与交互技巧

  • 图像保存:格式参数与质量设置

http://www.xdnf.cn/news/4016.html

相关文章:

  • 拆解GCN(Graph Convolutional Network)单层迭代公式
  • 基于MicroPython的ESP32开发
  • YOLOv8 标签透明化与可视化优化指南
  • 两次解析格式化字符串 + 使用SQLAlchemy的relationship执行任意命令 -- link-shortener b01lersCTF 2025
  • C语言|函数的递归调用
  • 智算中心建设方案和前景分析
  • RHCE 第二次作业
  • LeetCode 热题 100 118. 杨辉三角
  • boke luntan shop edu自动化脚本
  • 民宿管理系统5
  • WidowX-250s 机械臂的简单数字孪生案例
  • 【NLP】 31. Retrieval-Augmented Generation(RAG):KNN-LM, RAG、REALM、RETRO、FLARE
  • 【渗透测试】Web服务程序解析漏洞原理、利用方式、防范措施
  • C++进阶之——多态
  • 【C++项目实战】日志系统
  • WEB表单和表格标签综合案例
  • win10启动项管理在哪里设置?开机启动项怎么设置
  • Android工厂模式
  • 抽奖系统(基于Tkinter)
  • 微服务项目中网关服务挂了程序还可以正常运行吗
  • 数学复习笔记 2
  • JAVA在线考试系统考试管理题库管理成绩查询重复考试学生管理教师管理源码
  • JobHistory Server的配置和启动
  • LCD,LED
  • 期末项目Python
  • GoogleTest:GMock初识
  • 嵌入式开发学习日志Day13
  • window 系统 使用ollama + docker + deepseek R1+ Dify 搭建本地个人助手
  • C++笔记之接口`Interface`
  • 恶心的win11更新DIY 设置win11更新为100年