OpenCV实时目标跟踪开发部署 - 第3节

3. OpenCV环境搭建

OpenCV的安装与配置、读取视频帧、显示与保存图像、基础图像处理操作。

3.1 OpenCV 安装与配置

OpenCV(Open Source Computer Vision Library)是计算机视觉领域最流行的开源库。在 Python 环境中,推荐使用 opencv-python 包。安装命令如下:

# 使用 pip 安装核心库
pip install opencv-python

# 如需额外 contrib 模块(跟踪、特征等)
pip install opencv-contrib-python

验证安装是否成功:

import cv2
print(cv2.__version__)   # 例如 4.9.0
OpenCV 安装流程 pip install import cv2 验证版本 环境就绪,开始视觉之旅

3.2 读取视频帧

使用 cv2.VideoCapture 从摄像头或视频文件读取帧。核心步骤:

import cv2

cap = cv2.VideoCapture(0)               # 0 表示默认摄像头
# cap = cv2.VideoCapture('video.mp4')   # 或读取视频文件

while True:
    ret, frame = cap.read()             # ret 布尔值, frame 是图像数组
    if not ret:
        break
    # 对 frame 进行处理...
    cv2.imshow('Frame', frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()
VideoCapture cap.read() 处理帧 imshow 循环读取直到视频结束或按下 'q'

3.3 显示与保存图像

显示图像使用 cv2.imshow,保存图像使用 cv2.imwrite。

import cv2

img = cv2.imread('example.jpg')          # 读取图像
cv2.imshow('Display Window', img)        # 显示图像
cv2.waitKey(0)                           # 等待按键
cv2.destroyAllWindows()

# 保存图像
cv2.imwrite('output.png', img)           # 支持 PNG, JPG 等格式
imread imshow imwrite 读取 → 显示 → 保存 完整管线

3.4 基础图像处理操作

OpenCV 提供丰富的图像处理函数。下表列出最常用的基础操作:

操作函数说明
灰度转换cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)将彩色图转为单通道灰度
高斯模糊cv2.GaussianBlur(img, (5,5), 0)降噪平滑
Canny边缘检测cv2.Canny(img, 50, 150)提取边缘
图像缩放cv2.resize(img, (width, height))改变尺寸
绘制矩形cv2.rectangle(img, (x,y), (x+w,y+h), (0,255,0), 2)目标框标注

示例代码:

import cv2

img = cv2.imread('scene.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
blur = cv2.GaussianBlur(gray, (5,5), 0)
edges = cv2.Canny(blur, 50, 150)
cv2.imshow('Edges', edges)
cv2.waitKey(0)
cv2.destroyAllWindows()
基础图像处理管线 原图 灰度 高斯模糊 Canny 边缘 每个步骤均可独立调整参数 为后续目标跟踪提供预处理

3.5 综合示例:从摄像头读取并实时处理

import cv2

cap = cv2.VideoCapture(0)
while True:
    ret, frame = cap.read()
    if not ret:
        break
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    blur = cv2.GaussianBlur(gray, (7,7), 0)
    edges = cv2.Canny(blur, 30, 100)
    cv2.imshow('Original', frame)
    cv2.imshow('Edges', edges)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break
cap.release()
cv2.destroyAllWindows()