# 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. 视频保存 → 记录结果