OpenCV 从入门到精通详细教程

    • 1.2 安装 OpenCV-Python
    • 1.3 第一个程序:读取并显示图像
  1. 图像基础操作
    • 2.1 图像读取、显示与保存
    • 2.2 图像属性与像素访问
    • 2.3 颜色空间转换
    • 2.4 图像算术运算与位运算
  2. 图像几何变换
    • 3.1 缩放、平移、旋转
    • 3.2 仿射变换与透视变换
    • 3.3 图像金字塔
  3. 图像滤波与增强
    • 4.1 平滑滤波(均值、高斯、中值、双边)
    • 4.2 边缘检测(Sobel、Laplacian、Canny)
    • 4.3 图像锐化
  4. 形态学操作
    • 5.1 腐蚀与膨胀
    • 5.2 开运算、闭运算、形态学梯度、顶帽、黑帽
    • 5.3 应用实例:提取边界、消除噪声
  5. 图像阈值与分割
    • 6.1 全局阈值与自适应阈值
    • 6.2 Otsu 二值化
    • 6.3 分水岭算法简介
  6. 轮廓分析
    • 7.1 查找与绘制轮廓
    • 7.2 轮廓特征(面积、周长、外接矩形等)
    • 7.3 轮廓近似与凸包
    • 7.4 形状匹配
  7. 直方图
    • 8.1 计算与绘制直方图
    • 8.2 直方图均衡化
    • 8.3 直方图比较与反向投影
  8. 模板匹配
  9. 特征检测与匹配
    • 10.1 Harris 角点检测
    • 10.2 SIFT 特征检测
    • 10.3 ORB 特征检测与匹配
    • 10.4 特征匹配与单应性查找
  10. 视频处理与分析
    • 11.1 读取视频与摄像头
    • 11.2 视频写入
    • 11.3 运动检测(帧差分、背景减除)
  11. 目标跟踪
    • 12.1 MeanShift 与 CamShift
    • 12.2 基于 KCF 等跟踪器 API
  12. 深度学习模块(DNN)
    • 13.1 加载预训练模型
    • 13.2 使用 YOLO 进行目标检测
  13. 综合项目实战
    • 14.1 人脸检测与识别
    • 14.2 文档扫描仪
    • 14.3 手势识别

详细教程内容

第1章 OpenCV 简介与环境搭建

1.1 OpenCV 概述

OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习软件库。它提供了数千种算法,涵盖图像处理、视频分析、目标检测、人脸识别、三维重建等众多领域。OpenCV 支持 C++、Python、Java 等多种语言,可在 Windows、Linux、macOS、Android、iOS 等平台上运行。

本教程使用 Python 语言,配合 opencv-python 包进行讲解。Python 语法简洁,适合快速原型开发和学习。

1.2 安装 OpenCV-Python

最简单的方式是通过 pip 安装主模块和扩展模块:

bash

pip install opencv-python opencv-contrib-python
  • opencv-python:包含核心模块。
  • opencv-contrib-python:包含额外的贡献模块(如 SIFT、SURF 等算法)。

验证安装:

python

import cv2
print(cv2.__version__)

如果输出类似 4.8.0 的版本号,则安装成功。

1.3 第一个程序:读取并显示图像

python

import cv2

# 读取图像(路径中不能有中文)
img = cv2.imread('test.jpg')

# 检查是否读取成功
if img is None:
    print("图像读取失败")
else:
    # 显示图像窗口
    cv2.imshow('My Image', img)
    # 等待按键,0 表示无限等待
    cv2.waitKey(0)
    # 销毁所有窗口
    cv2.destroyAllWindows()

运行后会弹出窗口显示图片,按任意键关闭。OpenCV 的窗口管理简单直接,适合调试。


第2章 图像基础操作

2.1 图像读取、显示与保存

python

# 读取为彩色图像(默认)
img_color = cv2.imread('test.jpg', cv2.IMREAD_COLOR)
# 读取为灰度图
img_gray  = cv2.imread('test.jpg', cv2.IMREAD_GRAYSCALE)
# 保存图像
cv2.imwrite('gray.jpg', img_gray)

常用标志:cv2.IMREAD_COLOR(1)、cv2.IMREAD_GRAYSCALE(0)、cv2.IMREAD_UNCHANGED(-1,包含 alpha 通道)。

2.2 图像属性与像素访问

OpenCV 中图像以 NumPy 数组形式存储,因此可以使用 NumPy 的所有操作。

python

img = cv2.imread('test.jpg')
# 形状:(高度, 宽度, 通道数)
print(img.shape)   # 例如 (480, 640, 3)
# 总像素数
print(img.size)    # 480*640*3 = 921600
# 数据类型
print(img.dtype)   # uint8

# 访问某个像素:img[y, x, channel] (注意:先纵坐标后横坐标)
pixel = img[100, 200]        # BGR 三个通道的值
b = pixel[0]                 # 蓝色分量
g = img[100, 200, 1]         # 绿色分量

# 修改像素
img[100, 200] = [0, 0, 255]  # 设为红色(BGR)

# 取出 ROI(感兴趣区域)
roi = img[50:200, 100:300]  # 行范围,列范围

注意:OpenCV 默认颜色顺序是 BGR,而非 RGB,显示或保存时要留心。

2.3 颜色空间转换

python

img = cv2.imread('test.jpg')
# 转为灰度
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 转为 HSV
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
# 转为 RGB
rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)

HSV 空间在颜色筛选时非常有用,例如提取蓝色物体:

python

# 定义蓝色的 HSV 范围
lower_blue = np.array([100, 50, 50])
upper_blue = np.array([130, 255, 255])
mask = cv2.inRange(hsv, lower_blue, upper_blue)
# 显示原图中蓝色区域
result = cv2.bitwise_and(img, img, mask=mask)
cv2.imshow('Blue regions', result)

2.4 图像算术运算与位运算

两幅图像相加(需要尺寸和通道数相同):

python

img1 = cv2.imread('a.jpg')
img2 = cv2.imread('b.jpg')
add = cv2.add(img1, img2)            # 饱和运算
weighted = cv2.addWeighted(img1, 0.7, img2, 0.3, 0)  # 混合

位运算(常用于掩膜操作):

python

# 创建矩形掩膜
mask = np.zeros(img.shape[:2], np.uint8)
cv2.rectangle(mask, (100,100), (300,300), 255, -1)
masked_img = cv2.bitwise_and(img, img, mask=mask)

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注