目录
[1. 环境安装](#1. 环境安装)
[2. 基础操作示例](#2. 基础操作示例)
[2.1 图像读取与显示](#2.1 图像读取与显示)
[2.2 基本图像处理](#2.2 基本图像处理)
[2.3 图像滤波](#2.3 图像滤波)
[3. 实用功能实践](#3. 实用功能实践)
[3.1 人脸检测](#3.1 人脸检测)
[3.2 视频处理](#3.2 视频处理)
[3.3 特征检测](#3.3 特征检测)
[4. 实战项目:实时边缘检测](#4. 实战项目:实时边缘检测)
[5. 进阶技巧](#5. 进阶技巧)
[5.1 图像拼接](#5.1 图像拼接)
[5.2 对象跟踪](#5.2 对象跟踪)
[6. 常用函数速查表](#6. 常用函数速查表)
[7. 学习建议](#7. 学习建议)
[8. 常见问题](#8. 常见问题)

penCV(开源计算机视觉库)是一个强大的计算机视觉和机器学习软件库。下面我将带你快速上手OpenCV的核心功能。
1. 环境安装
bash
python
# 使用pip安装OpenCV
pip install opencv-python # 主模块
pip install opencv-contrib-python # 包含额外模块
2. 基础操作示例
2.1 图像读取与显示
python
python
import cv2
import numpy as np
# 读取图像
img = cv2.imread('image.jpg') # BGR格式
print(f"图像尺寸: {img.shape}") # (高度, 宽度, 通道数)
# 显示图像
cv2.imshow('Original Image', img)
cv2.waitKey(0) # 等待按键
cv2.destroyAllWindows()
# 保存图像
cv2.imwrite('output.jpg', img)
2.2 基本图像处理
python
python
# 转换为灰度图
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 调整大小
resized = cv2.resize(img, (300, 200))
# 旋转图像
(h, w) = img.shape[:2]
center = (w // 2, h // 2)
M = cv2.getRotationMatrix2D(center, 45, 1.0) # 旋转45度
rotated = cv2.warpAffine(img, M, (w, h))
# 裁剪图像
cropped = img[100:300, 200:400] # y: 100-300, x: 200-400

2.3 图像滤波
python
python
# 高斯模糊
blurred = cv2.GaussianBlur(img, (5, 5), 0)
# 中值滤波(去噪)
denoised = cv2.medianBlur(img, 5)
# 边缘检测(Canny)
edges = cv2.Canny(gray, 100, 200) # 阈值1, 阈值2
3. 实用功能实践
3.1 人脸检测
python
python
# 加载预训练的人脸检测器
face_cascade = cv2.CascadeClassifier(
cv2.data.haarcascades + 'haarcascade_frontalface_default.xml'
)
# 检测人脸
faces = face_cascade.detectMultiScale(
gray,
scaleFactor=1.1,
minNeighbors=5,
minSize=(30, 30)
)
# 绘制矩形框
for (x, y, w, h) in faces:
cv2.rectangle(img, (x, y), (x+w, y+h), (0, 255, 0), 2)
cv2.imshow('Face Detection', img)
cv2.waitKey(0)
3.2 视频处理
python
python
# 打开摄像头
cap = cv2.VideoCapture(0) # 0表示默认摄像头
while True:
ret, frame = cap.read()
if not ret:
break
# 实时处理
gray_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# 显示结果
cv2.imshow('Camera', frame)
cv2.imshow('Gray', gray_frame)
# 按'q'退出
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
3.3 特征检测
python
python
# 创建ORB检测器
orb = cv2.ORB_create()
# 检测关键点和描述符
keypoints, descriptors = orb.detectAndCompute(gray, None)
# 绘制关键点
img_keypoints = cv2.drawKeypoints(
img,
keypoints,
None,
color=(0, 255, 0),
flags=0
)
4. 实战项目:实时边缘检测
python
python
import cv2
import numpy as np
def real_time_edge_detection():
cap = cv2.VideoCapture(0)
while True:
ret, frame = cap.read()
if not ret:
break
# 转换为灰度图
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# 边缘检测
edges = cv2.Canny(gray, 50, 150)
# 查找轮廓
contours, _ = cv2.findContours(
edges,
cv2.RETR_EXTERNAL,
cv2.CHAIN_APPROX_SIMPLE
)
# 绘制轮廓
result = frame.copy()
cv2.drawContours(result, contours, -1, (0, 255, 0), 2)
# 显示
cv2.imshow('Original', frame)
cv2.imshow('Edges', edges)
cv2.imshow('Contours', result)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
if __name__ == "__main__":
real_time_edge_detection()
5. 进阶技巧
5.1 图像拼接
python
python
def stitch_images(images):
stitcher = cv2.Stitcher_create()
status, panorama = stitcher.stitch(images)
if status == cv2.Stitcher_OK:
return panorama
else:
print("拼接失败")
return None
5.2 对象跟踪
python
python
# 使用KCF跟踪器
tracker = cv2.TrackerKCF_create()
bbox = cv2.selectROI("Select Object", img, False)
tracker.init(img, bbox)
while True:
ret, frame = cap.read()
if not ret:
break
success, bbox = tracker.update(frame)
if success:
x, y, w, h = [int(v) for v in bbox]
cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 2)
cv2.imshow("Tracking", frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
6. 常用函数速查表
| 功能 | 函数 | 说明 |
|---|---|---|
| 读取图像 | cv2.imread() |
读取图像文件 |
| 显示图像 | cv2.imshow() |
显示图像窗口 |
| 保存图像 | cv2.imwrite() |
保存到文件 |
| 颜色转换 | cv2.cvtColor() |
转换颜色空间 |
| 调整大小 | cv2.resize() |
缩放图像 |
| 图像旋转 | cv2.getRotationMatrix2D() + cv2.warpAffine() |
旋转图像 |
| 边缘检测 | cv2.Canny() |
Canny边缘检测 |
| 人脸检测 | cv2.CascadeClassifier() |
使用Haar级联检测 |
| 特征点 | cv2.ORB_create() |
ORB特征检测 |
| 轮廓查找 | cv2.findContours() |
查找图像轮廓 |
7. 学习建议
-
从简单开始:先掌握基础操作
-
实际项目驱动:选择一个小项目(如车牌识别、手势识别)
-
查看官方文档:OpenCV文档非常全面
-
结合NumPy:OpenCV图像本质是NumPy数组
-
调试技巧 :使用
print(image.shape)查看图像维度
8. 常见问题
Q: 图像显示是蓝色的?
A: OpenCV使用BGR格式,matplotlib使用RGB。转换:rgb = cv2.cvtColor(bgr, cv2.COLOR_BGR2RGB)
Q: 如何提高处理速度?
A: 减小图像尺寸、使用灰度图、优化算法参数
Q: 内存占用过大?
A: 及时释放资源:cv2.destroyAllWindows(),cap.release()
这个快速实践指南涵盖了OpenCV的核心功能,可以帮助你快速上手。建议按照示例代码逐个尝试,理解每个函数的作用和参数含义。