# openCV_learn
**Repository Path**: lirongman/open-cv_learn
## Basic Information
- **Project Name**: openCV_learn
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-03-24
- **Last Updated**: 2026-03-24
## Categories & Tags
**Categories**: Uncategorized
**Tags**: OpenCV
## README
# OpenCV 学习笔记
## 一、图像基础操作
### 1.1 图像的读取、显示和保存
| 函数 | 说明 | 参数 | 应用场景 |
|------|------|------|----------|
| `cv2.imread()` | 读取图像 | `('文件路径')` | 加载图片文件 |
| `cv2.imshow()` | 显示图像 | `('窗口名', 图像)` | 预览图像 |
| `cv2.imwrite()` | 保存图像 | `('文件名', 图像)` | 保存处理结果 |
| `cv2.waitKey()` | 等待按键 | `(延迟毫秒)` | 控制显示时间 |
| `cv2.destroyAllWindows()` | 关闭所有窗口 | 无 | 释放资源 |
```python
# 示例:图片读取、显示和保存
import cv2
image = cv2.imread('songshu.png')
cv2.imshow('image', image)
cv2.waitKey(1000)
cv2.imwrite('songshu_copy.png', image)
cv2.destroyAllWindows()
```
### 1.2 图像属性
| 属性 | 说明 | 示例 |
|------|------|------|
| `image.shape` | 图像大小 | `(480, 640, 3)` 表示高480,宽640,3通道 |
```python
# 示例:查看图像属性
print(image.shape) # 输出:(高, 宽, 通道数)
print(image.size) # 像素总数
print(image.dtype) # 数据类型
```
### 1.3 图像尺寸调整
| 函数/方法 | 说明 | 参数 |
|------|------|------|
| `cv2.resize()` | 调整图像大小 | `(图像, (目标宽, 目标高))` |
| 数组切片 | 图像裁剪 | `[起始y:结束y, 起始x:结束x]` |
```python
# 示例:图像缩放和裁剪
img_resize = cv2.resize(img0, (400, 200)) # 缩放到400x200
img_crop = img0[50:350, 200:600] # 裁剪区域
```
---
## 二、颜色空间转换
### 2.1 颜色空间转换函数
| 函数/常量 | 说明 | 应用场景 |
|------|------|----------|
| `cv2.cvtColor()` | 颜色空间转换 | 颜色分析、特征提取 |
| `cv2.COLOR_BGR2RGB` | BGR转RGB | 正确显示颜色(matplotlib) |
| `cv2.COLOR_BGR2GRAY` | BGR转灰度 | 简化处理、减少计算 |
| `cv2.COLOR_BGR2HSV` | BGR转HSV | 颜色识别、分割 |
```python
# 示例:颜色空间转换
img_rgb = cv2.cvtColor(img0, cv2.COLOR_BGR2RGB) # RGB格式
img_gray = cv2.cvtColor(img0, cv2.COLOR_BGR2GRAY) # 灰度图
img_hsv = cv2.cvtColor(img0, cv2.COLOR_BGR2HSV) # HSV格式
```
---
## 三、图像模糊处理
### 3.1 模糊算法
| 函数 | 说明 | 参数 | 特点 |
|------|------|------|------|
| `cv2.blur()` | 均值模糊 | `(图像, (核宽, 核高))` | 简单平均,速度快 |
| `cv2.GaussianBlur()` | 高斯模糊 | `(图像, (核大小,核大小), 标准差)` | 保留边缘,自然 |
| `cv2.medianBlur()` | 中值模糊 | `(图像, 核大小)` | 去噪效果好,保留边缘 |
```python
# 示例:不同模糊效果
k_size = 9
img_mean = cv2.blur(img0, (k_size, k_size)) # 均值模糊
img_gaussian = cv2.GaussianBlur(img0, (k_size, k_size), 3) # 高斯模糊
img_median = cv2.medianBlur(img0, k_size) # 中值模糊
```
---
## 四、阈值处理
### 4.1 全局阈值
| 函数 | 说明 | 参数 |
|------|------|------|
| `cv2.threshold()` | 阈值处理 | `(图像, 阈值, 最大值, 类型)` |
**阈值类型:**
| 类型 | 说明 |
|------|------|
| `cv2.THRESH_BINARY` | 二值化(大于阈值设最大值,否则0) |
| `cv2.THRESH_BINARY_INV` | 反向二值化 |
| `cv2.THRESH_TRUNC` | 截断(大于阈值设阈值,否则不变) |
| `cv2.THRESH_TOZERO` | 归零(小于阈值设0,否则不变) |
| `cv2.THRESH_TOZERO_INV` | 反向归零 |
```python
# 示例:全局阈值
ret, img_binary = cv2.threshold(img_gray, 127, 255, cv2.THRESH_BINARY)
ret, img_binary_inv = cv2.threshold(img_gray, 127, 255, cv2.THRESH_BINARY_INV)
```
### 4.2 自适应阈值
| 函数 | 说明 | 参数 | 特点 |
|------|------|------|------|
| `cv2.adaptiveThreshold()` | 自适应阈值 | `(图像, 最大值, 方法, 类型, 块大小, 常数)` | 适应光照变化 |
**自适应方法:**
| 方法 | 说明 |
|------|------|
| `cv2.ADAPTIVE_THRESH_MEAN_C` | 邻域均值作为阈值 |
| `cv2.ADAPTIVE_THRESH_GAUSSIAN_C` | 邻域加权均值作为阈值 |
```python
# 示例:自适应阈值
img_adapt_mean = cv2.adaptiveThreshold(img_gray, 255,
cv2.ADAPTIVE_THRESH_MEAN_C,
cv2.THRESH_BINARY, 11, 2)
img_adapt_gaussian = cv2.adaptiveThreshold(img_gray, 255,
cv2.ADAPTIVE_THRESH_GAUSSIAN_C,
cv2.THRESH_BINARY, 11, 2)
```
### 4.3 Otsu阈值
| 方法 | 说明 | 特点 |
|------|------|------|
| `cv2.THRESH_OTSU` | Otsu自动阈值 | 自动选择最佳全局阈值 |
```python
# 示例:Otsu阈值
ret, img_otsu = cv2.threshold(img_gray, 0, 255,
cv2.THRESH_BINARY + cv2.THRESH_OTSU)
```
---
## 五、边缘检测
### 5.1 Canny边缘检测
| 函数 | 说明 | 参数 | 应用 |
|------|------|------|------|
| `cv2.Canny()` | Canny边缘检测 | `(图像, 低阈值, 高阈值)` | 物体轮廓提取 |
```python
# 示例:Canny边缘检测
img_canny1 = cv2.Canny(img_gray, 50, 150) # 低阈值50,高阈值150
img_canny2 = cv2.Canny(img_gray, 100, 200) # 更严格的阈值
```
### 5.2 Sobel算子
| 函数 | 说明 | 参数 |
|------|------|------|
| `cv2.Sobel()` | Sobel边缘检测 | `(图像, 数据类型, dx, dy, 核大小)` |
```python
# 示例:Sobel边缘检测
sobel_x = cv2.Sobel(img_gray, cv2.CV_64F, 1, 0, ksize=3) # x方向梯度
sobel_y = cv2.Sobel(img_gray, cv2.CV_64F, 0, 1, ksize=3) # y方向梯度
sobel_x = np.absolute(sobel_x).astype(np.uint8)
sobel_y = np.absolute(sobel_y).astype(np.uint8)
sobel_combined = cv2.bitwise_or(sobel_x, sobel_y)
```
### 5.3 Laplacian算子
| 函数 | 说明 | 参数 |
|------|------|------|
| `cv2.Laplacian()` | Laplacian边缘检测 | `(图像, 数据类型, 核大小)` |
```python
# 示例:Laplacian边缘检测
laplacian = cv2.Laplacian(img_gray, cv2.CV_64F, ksize=3)
laplacian = np.absolute(laplacian).astype(np.uint8)
```
### 5.4 形态学操作
| 函数 | 说明 | 参数 | 效果 |
|------|------|------|------|
| `cv2.dilate()` | 膨胀 | `(图像, 核)` | 加粗边缘,填充空洞 |
| `cv2.erode()` | 腐蚀 | `(图像, 核)` | 细化边缘,去除噪点 |
| `cv2.morphologyEx()` | 形态学操作 | `(图像, 操作类型, 核)` | 开运算、闭运算等 |
```python
# 示例:膨胀和腐蚀
kernel = np.ones((5,5), np.uint8)
img_dilate = cv2.dilate(img_canny, kernel, iterations=1) # 膨胀
img_erode = cv2.erode(img_canny, kernel, iterations=1) # 腐蚀
# 开运算(先腐蚀后膨胀)- 去除噪点
img_open = cv2.morphologyEx(img_canny, cv2.MORPH_OPEN, kernel)
# 闭运算(先膨胀后腐蚀)- 填充空洞
img_close = cv2.morphologyEx(img_canny, cv2.MORPH_CLOSE, kernel)
```
---
## 六、轮廓检测与分析
### 6.1 轮廓检测
| 函数 | 说明 | 返回值 | 注意 |
|------|------|--------|------|
| `cv2.findContours()` | 查找轮廓 | `(image, contours, hierarchy)` | OpenCV 3.x返回3个值 |
**检索模式:**
| 模式 | 说明 |
|------|------|
| `cv2.RETR_EXTERNAL` | 只检测最外层轮廓 |
| `cv2.RETR_LIST` | 检测所有轮廓,不建立层次关系 |
| `cv2.RETR_CCOMP` | 检测所有轮廓,组织为两级层次 |
| `cv2.RETR_TREE` | 检测所有轮廓,完整建立层次关系 |
**近似方法:**
| 方法 | 说明 |
|------|------|
| `cv2.CHAIN_APPROX_SIMPLE` | 压缩存储,只保留端点 |
| `cv2.CHAIN_APPROX_NONE` | 存储所有轮廓点 |
```python
# 示例:查找轮廓(OpenCV 3.x版本)
img_result, contours, hierarchy = cv2.findContours(img_binary,
cv2.RETR_TREE,
cv2.CHAIN_APPROX_SIMPLE)
# 兼容性写法(适应不同版本)
result = cv2.findContours(img_binary, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
if len(result) == 3:
_, contours, hierarchy = result
else:
contours, hierarchy = result
```
### 6.2 轮廓分析函数
| 函数 | 说明 | 应用 |
|------|------|------|
| `cv2.contourArea()` | 计算轮廓面积 | 过滤小轮廓 |
| `cv2.arcLength()` | 计算轮廓周长 | 形状分析 |
| `cv2.boundingRect()` | 获取边界框 | 定位物体 |
| `cv2.minEnclosingCircle()` | 最小外接圆 | 圆形检测 |
| `cv2.moments()` | 计算轮廓矩 | 找中心点、方向 |
| `cv2.convexHull()` | 计算凸包 | 形状简化 |
```python
# 示例:轮廓分析
for cnt in contours:
area = cv2.contourArea(cnt) # 面积
perimeter = cv2.arcLength(cnt, True) # 周长
x, y, w, h = cv2.boundingRect(cnt) # 边界框
(cx, cy), radius = cv2.minEnclosingCircle(cnt) # 最小外接圆
M = cv2.moments(cnt) # 矩
if M["m00"] != 0:
center_x = int(M["m10"] / M["m00"]) # 中心x
center_y = int(M["m01"] / M["m00"]) # 中心y
```
### 6.3 轮廓绘制
| 函数 | 参数说明 | 示例 |
|------|----------|------|
| `cv2.drawContours()` | `(图像, [轮廓列表], 索引, 颜色, 线宽)` | `cv2.drawContours(img, [cnt], -1, (0,255,0), 2)` |
```python
# 示例:绘制轮廓
img_result = img0.copy()
for cnt in contours:
if cv2.contourArea(cnt) > 200: # 过滤小轮廓
cv2.drawContours(img_result, [cnt], -1, (0, 255, 0), 2) # 绘制轮廓
x, y, w, h = cv2.boundingRect(cnt) # 边界框
cv2.rectangle(img_result, (x, y), (x+w, y+h), (0, 0, 255), 2) # 绘制矩形
```
---
## 七、图像绘制
### 7.1 基本绘图函数
| 函数 | 说明 | 参数 | 示例 |
|------|------|------|------|
| `cv2.line()` | 画直线 | `(图像, 起点, 终点, 颜色, 线宽)` | `cv2.line(img, (100,50), (300,250), (0,255,0), 5)` |
| `cv2.rectangle()` | 画矩形 | `(图像, 左上角, 右下角, 颜色, 线宽)` | `cv2.rectangle(img, (100,350), (350,500), (255,0,0), 3)` |
| `cv2.circle()` | 画圆 | `(图像, 圆心, 半径, 颜色, 线宽)` | `cv2.circle(img, (300,200), 50, (0,0,255), -1)` |
| `cv2.putText()` | 添加文字 | `(图像, 文字, 位置, 字体, 大小, 颜色, 线宽)` | `cv2.putText(img, 'Hello', (100,100), cv2.FONT_HERSHEY_SIMPLEX, 1, (255,255,255), 2)` |
**说明:**
- 线宽为 `-1` 表示填充
- 颜色格式为 `(B, G, R)`,如 `(0, 255, 0)` 表示绿色
```python
# 示例:图像绘制
img = cv2.imread('whiteboard.png')
# 画线
cv2.line(img, (100, 50), (300, 250), (0, 255, 0), 5)
# 画矩形(填充)
cv2.rectangle(img, (100, 350), (350, 500), (255, 134, 34), -1)
# 画圆
cv2.circle(img, (640, 300), 160, (23, 5, 200), 5)
# 添加文字
cv2.putText(img, 'OpenCV!', (100, 640),
cv2.FONT_HERSHEY_SIMPLEX, 4, (255, 255, 0), 8)
```
---
## 八、视频处理
### 8.1 视频读取
| 函数/类 | 说明 | 方法 |
|---------|------|------|
| `cv2.VideoCapture()` | 创建视频捕获对象 | `cap = cv2.VideoCapture(0)` # 0为摄像头 |
| `cap.read()` | 读取帧 | `ret, frame = cap.read()` |
| `cap.release()` | 释放资源 | `cap.release()` |
| `cv2.VideoWriter()` | 创建视频写入对象 | 保存视频 |
```python
# 示例:摄像头读取
cap = cv2.VideoCapture(0) # 0表示第一个摄像头
while True:
ret, frame = cap.read() # 读取一帧
if not ret:
break
cv2.imshow('Camera', frame) # 显示
if cv2.waitKey(1) & 0xFF == ord('q'): # 按q退出
break
cap.release()
cv2.destroyAllWindows()
```
### 8.2 视频保存
```python
# 示例:保存视频
cap = cv2.VideoCapture(0)
fourcc = cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter('output.avi', fourcc, 20.0, (640, 480))
while True:
ret, frame = cap.read()
if ret:
out.write(frame) # 写入视频
cv2.imshow('frame', frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
else:
break
cap.release()
out.release()
cv2.destroyAllWindows()
```
---
## 九、综合应用示例
### 9.1 物体检测(轮廓+边界框)
```python
import cv2
import numpy as np
# 读取图像
img = cv2.imread('birds.png')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 二值化
ret, binary = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY_INV)
# 查找轮廓
_, contours, hierarchy = cv2.findContours(binary, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
# 绘制边界框
result = img.copy()
for cnt in contours:
area = cv2.contourArea(cnt)
if area > 200: # 只处理面积大于200的轮廓
x, y, w, h = cv2.boundingRect(cnt)
cv2.rectangle(result, (x, y), (x + w, y + h), (0, 255, 0), 2)
cv2.putText(result, f'Area:{int(area)}', (x, y-5),
cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0,255,0), 1)
cv2.imshow('Detection', result)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
### 9.2 颜色识别(HSV)
```python
import cv2
import numpy as np
# 读取图像
img = cv2.imread('color_balls.jpg')
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
# 定义颜色范围(绿色)
lower_green = np.array([35, 50, 50])
upper_green = np.array([85, 255, 255])
# 创建掩码
mask = cv2.inRange(hsv, lower_green, upper_green)
# 形态学操作
kernel = np.ones((5,5), np.uint8)
mask = cv2.erode(mask, kernel, iterations=1)
mask = cv2.dilate(mask, kernel, iterations=2)
# 查找轮廓
_, contours, _ = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
# 绘制结果
result = img.copy()
for cnt in contours:
area = cv2.contourArea(cnt)
if area > 500:
x, y, w, h = cv2.boundingRect(cnt)
cv2.rectangle(result, (x, y), (x+w, y+h), (0, 255, 0), 2)
cv2.imshow('Result', result)
cv2.imshow('Mask', mask)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
---
## 十、常见错误及解决方法
| 错误 | 原因 | 解决方法 |
|------|------|----------|
| `ImportError: No module named cv2` | OpenCV未安装 | `pip install opencv-python` |
| `ValueError: too many values to unpack` | OpenCV版本不同,返回值个数不对 | 检查返回值个数,用兼容性写法 |
| `TypeError: an integer is required (got tuple)` | 参数类型错误 | 检查参数顺序和类型 |
| `AttributeError: module 'cv2' has no attribute 'drawContour'` | 函数名错误 | 使用 `drawContours`(复数) |
| `cv2.error: ... is not a numpy array` | 图像读取失败 | 检查文件路径是否正确 |
| 图像显示为None | 文件不存在或路径错误 | 使用绝对路径或检查文件位置 |
### 10.1 兼容性写法示例
```python
# findContours 兼容不同版本
result = cv2.findContours(binary, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
if len(result) == 3:
# OpenCV 3.x
_, contours, hierarchy = result
else:
# OpenCV 4.x
contours, hierarchy = result
```
---
## 十一、常用技巧总结
1. **图像副本**:处理时使用 `img.copy()` 避免修改原图
```python
img_copy = img0.copy()
```
2. **轮廓过滤**:用 `cv2.contourArea()` 过滤小轮廓
```python
if cv2.contourArea(cnt) > min_area:
# 处理轮廓
```
3. **调试技巧**:用 `print(image.shape)` 查看图像尺寸
```python
print(f"图像大小: {image.shape}")
```
4. **性能优化**:先转灰度再处理,减少计算量
```python
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
```
5. **窗口管理**:创建可调整大小的窗口
```python
cv2.namedWindow('image', cv2.WINDOW_NORMAL)
cv2.resizeWindow('image', 800, 600)
```
6. **按键退出**:常用退出方式
```python
if cv2.waitKey(1) & 0xFF == ord('q'):
break
```
---
## 十二、OpenCV版本信息
```python
import cv2
print(f"OpenCV版本: {cv2.__version__}")
print(f"CPU数量: {cv2.getNumberOfCPUs()}")
```
## 每个功能的具体应用场景
### 一、图像基础操作的应用
| 功能 | 应用场景 |
|------|----------|
| **图像读取** | • 加载本地图片进行处理
• 批量处理文件夹中的图片
• 从网络下载图片后读取
• 视频帧提取后的处理 |
| **图像显示** | • 实时预览处理效果
• 调试代码时查看中间结果
• 展示最终处理成果
• 制作图像处理演示程序 |
| **图像保存** | • 保存处理后的结果
• 生成处理报告配图
• 批量转换图片格式
• 制作数据集 |
| **图像裁剪/缩放** | • 预处理统一图片大小
• 提取感兴趣区域(ROI)
• 生成缩略图
• 适应模型输入尺寸
• 去除图像多余边缘 |
### 二、颜色空间转换的应用
| 转换 | 应用场景 |
|------|----------|
| **BGR转灰度** | • 减少计算量,提高处理速度
• 边缘检测前的预处理
• 图像二值化的基础
• OCR文字识别预处理
• 人脸识别预处理
• 车牌识别预处理 |
| **BGR转HSV** | • **颜色识别**(红绿灯、交通标志)
• **物体追踪**(足球、篮球追踪)
• 肤色检测(人脸检测、手势识别)
• 果蔬成熟度判断(根据颜色)
• 车牌颜色识别(蓝牌、黄牌)
• 火焰检测
• 医学图像分析 |
| **BGR转RGB** | • Matplotlib正确显示
• Web应用中的图像输出
• 与其他库的数据交换(PIL、TensorFlow)
• 打印输出 |
### 三、图像模糊处理的应用
| 模糊类型 | 应用场景 |
|----------|----------|
| **均值模糊** | • 快速降噪
• 图像预处理
• 制造背景虚化效果
• 降低图像细节 |
| **高斯模糊** | • **人像美颜**(皮肤平滑)
• 边缘检测前降噪
• 特征提取前的预处理
• 模拟景深效果
• 图像金字塔构建
• 去雾算法预处理 |
| **中值模糊** | • **去除椒盐噪声**(老照片修复)
• 文档扫描去斑点
• 医学图像处理(去噪)
• 雷达图像处理
• 保留边缘的同时降噪 |
### 四、阈值处理的应用
| 阈值类型 | 应用场景 |
|----------|----------|
| **二值化 (THRESH_BINARY)** | • **文档扫描**(文字提取)
• 车牌识别
• 二维码/条形码识别
• 答题卡识别
• 表格识别 |
| **反向二值化 (THRESH_BINARY_INV)** | • 暗色背景上的亮色物体检测
• 细胞图像分析
• 特定条件下的物体分割 |
| **截断阈值 (THRESH_TRUNC)** | • 光照不均图像的预处理
• 保留部分灰度信息的场景 |
| **归零阈值 (THRESH_TOZERO)** | • 提取图像中较亮区域
• 高光分析 |
| **自适应阈值** | • **光照不均匀的文档处理**
• 自然场景下的文字识别
• 复杂背景下的物体分割
• 票据识别
• 名片识别 |
| **Otsu阈值** | • **自动确定最佳阈值**
• 双峰直方图图像分割
• 自动化处理流水线
• 无需人工干预的场景 |
### 五、边缘检测的应用
| 边缘检测 | 应用场景 |
|----------|----------|
| **Canny边缘检测** | • **物体轮廓提取**
• 车道线检测(自动驾驶)
• 工业缺陷检测
• 图像分割预处理
• 特征匹配
• 测量物体尺寸 |
| **Sobel算子** | • 梯度计算
• 边缘方向分析
• 图像锐化
• 纹理分析 |
| **Laplacian算子** | • 边缘增强
• 图像锐化
• 斑点检测 |
### 六、形态学操作的应用
| 操作 | 应用场景 |
|------|----------|
| **膨胀** | • 连接断开的轮廓
• 填补物体内部空洞
• 加粗边缘
• 合并相邻区域 |
| **腐蚀** | • 去除细小噪点
• 分离相连物体
• 细化边缘
• 去除小连通域 |
| **开运算(先腐蚀后膨胀)** | • **去除噪点**
• 平滑物体轮廓
• 分离粘连物体 |
| **闭运算(先膨胀后腐蚀)** | • **填补空洞**
• 连接断裂轮廓
• 平滑边缘 |
### 七、轮廓检测的应用
| 轮廓功能 | 应用场景 |
|----------|----------|
| **轮廓查找** | • **目标检测**(找出图像中所有物体)
• 物体计数(生产线计数)
• 细胞计数(医学图像)
• 交通流量统计 |
| **轮廓面积** | • 过滤小物体(去除噪点)
• 按大小筛选目标
• 测量物体面积 |
| **边界框** | • **目标定位**
• 物体跟踪
• 感兴趣区域提取
• 目标裁剪 |
| **最小外接圆** | • 圆形物体检测
• 硬币检测
• 球类追踪 |
| **轮廓矩/中心点** | • **物体追踪**(求质心)
• 目标定位
• 运动轨迹分析 |
### 八、图像绘制的应用
| 绘制功能 | 应用场景 |
|----------|----------|
| **画直线** | • 标注边界
• 绘制坐标轴
• 绘制辅助线
• 连接轨迹点 |
| **画矩形** | • **目标标注**(检测结果框选)
• 感兴趣区域标记
• 人脸检测框
• 车牌定位框 |
| **画圆** | • 标记中心点
• 圆形目标标注
• 关键点标记
• 兴趣区域标记 |
| **添加文字** | • 图像添加标题
• 显示检测结果(置信度、类别)
• 添加水印
• 显示帧率、参数信息 |
### 九、视频处理的应用
| 功能 | 应用场景 |
|------|----------|
| **摄像头读取** | • **实时监控系统**
• 人脸识别门禁
• 运动检测
• 直播处理
• AR应用 |
| **视频文件读取** | • 视频内容分析
• 监控录像回放分析
• 运动比赛分析
• 视频剪辑预处理 |
| **视频保存** | • 录制处理结果
• 生成处理报告视频
• 保存监控证据 |
### 十、综合应用案例
| 应用领域 | 具体案例 | 使用的OpenCV功能 |
|----------|----------|------------------|
| **安防监控** | 运动检测 | 背景减除、轮廓检测、矩形绘制 |
| **自动驾驶** | 车道线检测 | Canny边缘检测、霍夫变换、直线绘制 |
| **医疗影像** | 细胞计数 | 阈值处理、轮廓检测、形态学操作 |
| **工业质检** | 产品缺陷检测 | 边缘检测、轮廓分析、特征匹配 |
| **文档处理** | OCR文字识别 | 灰度化、阈值处理、形态学操作 |
| **交通管理** | 车牌识别 | 颜色识别、边缘检测、轮廓分析 |
| **零售业** | 货架商品识别 | 特征匹配、轮廓检测、颜色识别 |
| **农业** | 果蔬分级 | 颜色识别、轮廓分析、尺寸测量 |
| **体育分析** | 球类追踪 | 颜色识别、轮廓检测、轨迹绘制 |
| **教育** | 答题卡识别 | 阈值处理、轮廓检测、模板匹配 |
### 十一、实际项目流程示例
**项目:智能交通监控系统**
```python
1. 视频读取 → 获取实时画面
2. 灰度转换 → 减少计算量
3. 高斯模糊 → 去除噪点
4. 边缘检测 → 找出车辆轮廓
5. 轮廓查找 → 定位车辆
6. 边界框绘制 → 标记车辆
7. 中心点计算 → 追踪轨迹
8. 视频保存 → 记录结果