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

一、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 sys

try:
    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'):
            break
    
    cap.release()
    cv2.destroyAllWindows()

  • 8.2 图像处理流水线

    典型处理流程:

  1. 读取原始图像

  2. 颜色空间转换

  3. 应用滤镜/算法

  4. 输出处理结果

    九、最佳实践建议

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

  • 统一使用绝对路径

  • 及时释放窗口资源

  • 重要数据添加异常处理

  • 注意BGR与RGB的转换

    十、总结

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

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值