OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习软件库。它被广泛应用于图像处理、视频捕捉、特征检测、目标识别等领域。以下是 OpenCV 的一些基础概念,帮助你快速入门:
1. 图像表示
- OpenCV 中图像使用
cv2.Mat
对象表示。 - 图像的存储格式通常是多维数组,例如:
- 灰度图:二维数组(高度 × 宽度)。
- 彩色图:三维数组(高度 × 宽度 × 通道数),通常为 BGR 格式(蓝、绿、红)。
2. 常用数据类型
cv2.imread()
:读取图像文件。cv2.imwrite()
:保存图像文件。cv2.imshow()
:显示图像。cv2.waitKey()
:等待键盘输入。cv2.destroyAllWindows()
:关闭所有窗口。
3. 图像的基本操作
- 读取图像
import cv2 image = cv2.imread("image.jpg")
- 显示图像
cv2.imshow("Image", image) cv2.waitKey(0) cv2.destroyAllWindows()
- 保存图像
cv2.imwrite("output.jpg", image)
4. 颜色空间转换
- OpenCV 默认使用 BGR 格式,但可以转换到其他颜色空间。
- 灰度图转换
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
- HSV 色彩空间
hsv_image = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
5. 图像处理
- 边缘检测
edges = cv2.Canny(image, 100, 200)
- 高斯模糊
blurred = cv2.GaussianBlur(image, (5,5), 0)
- 阈值处理
_, binary = cv2.threshold(gray_image, 127, 255, cv2.THRESH_BINARY)
6. 轮廓检测
- 轮廓是图像中物体的边界。
- 查找轮廓
contours, _ = cv2.findContours(binary, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
- 绘制轮廓
cv2.drawContours(image, contours, -1, (0,255,0), 2)
7. 视频处理
- OpenCV 支持从摄像头或视频文件中捕获帧。
- 读取视频
cap = cv2.VideoCapture("video.mp4") while cap.isOpened(): ret, frame = cap.read() if not ret: break cv2.imshow("Frame", frame) if cv2.waitKey(25) & 0xFF == ord('q'): break cap.release() cv2.destroyAllWindows()
8. 特征检测
- OpenCV 提供了多种特征检测算法,如 SIFT、SURF、ORB 等。
- 使用 ORB 检测特征点
orb = cv2.ORB_create() keypoints, descriptors = orb.detectAndCompute(gray_image, None) image_with_keypoints = cv2.drawKeypoints(image, keypoints, None)