OpenCV(Open Source Computer Vision Library)是一个开源的、跨平台的计算机视觉和机器学习软件库。它由英特尔公司于 1999 年发起并开发,现在由 Itseez(已被英特尔收购)和社区共同维护。
顾名思义,它的核心功能是让计算机能“看到”并“理解”图像和视频中的内容,就像人类的视觉系统一样。
OpenCV 的功能非常庞大,可以大致分为以下几个核心领域:
这是最基础的功能,用于对图像本身进行操作和变换。
处理视频流,可以看作是连续图像的处理。
这是计算机视觉的核心任务,让计算机识别出图像中的特定物体。
dnn
模块可以直接加载用 TensorFlow, PyTorch, Caffe 等框架训练好的模型(如 YOLO, SSD, Faster R-CNN),进行高效的实时目标检测。OpenCV 内置了一些经典的机器学习算法,虽然不如 Scikit-learn 全面,但与视觉任务结合紧密。
以下代码展示了如何使用 OpenCV 预训练的 Haar 级联分类器来检测摄像头视频流中的人脸。
import cv2
# 1. 加载预训练的人脸检测模型(Haar级联分类器)
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')
# 2. 打开默认摄像头(0代表第一个摄像头)
cap = cv2.VideoCapture(0)
while True:
# 3. 读取一帧图像
ret, frame = cap.read()
# 4. 转换为灰度图(Haar检测器需要灰度图)
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# 5. 进行人脸检测
faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30))
# 6. 在检测到的人脸周围画矩形框
for (x, y, w, h) in faces:
cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 2) # 绿色框,线宽为2
# 7. 显示结果
cv2.imshow('Face Detection', frame)
# 8. 按 'q' 键退出循环
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# 9. 释放摄像头并关闭所有窗口
cap.release()
cv2.destroyAllWindows()
dnn
模块可以导入模型进行推理(Inference),但它本身不是一个深度学习训练框架。模型的训练仍需在 TensorFlow/PyTorch 等框架中完成。OpenCV 的应用无处不在:
OpenCV 是进入计算机视觉世界的大门,是事实上的行业标准库。它提供了一个强大、高效且易用的工具集,让开发者能够构建从简单图像处理到复杂人工智能视觉的应用。无论你是初学者还是专家,OpenCV 都是你工具箱中不可或缺的一员。