OpenCV(开源计算机视觉库)是一个专注于实时计算机视觉的跨平台库。它提供了数百种计算机视觉算法,广泛应用于图像处理、视频捕捉、分析和机器学习等领域。
OpenCV 提供了 Python 绑定,可以通过 pip
来安装:
bashpip install opencv-python
如果你还需要额外的功能模块(如 SIFT 和 SURF 等专利算法),可以安装 opencv-contrib-python
包:
bashpip install opencv-contrib-python
你可以通过包管理器来安装 OpenCV:
bashsudo apt-get update sudo apt-get install libopencv-dev python3-opencv
首先,确保你已经安装了 EPEL 仓库:
bashsudo yum install epel-release
然后安装 OpenCV:
bashsudo yum install opencv opencv-devel opencv-python
如果你使用的是 Homebrew 包管理器,可以通过以下命令安装:
bashbrew install opencv
对于 Python 用户,建议通过 pip
安装 OpenCV-Python 包。
以下是一些 OpenCV 的基本使用示例:
pythonimport cv2
# 读取图像
img = cv2.imread('example.jpg')
# 显示图像
cv2.imshow('Image', img)
# 等待按键事件,保持窗口打开
cv2.waitKey(0)
cv2.destroyAllWindows()
pythonimport cv2
# 打开视频文件或摄像头
cap = cv2.VideoCapture('example.mp4')
while cap.isOpened():
ret, frame = cap.read()
if not ret:
break
# 显示帧
cv2.imshow('Frame', frame)
# 按下 'q' 键退出
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
pythonimport cv2
# 读取图像
img = cv2.imread('example.jpg')
# 转换为灰度图像
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 保存灰度图像
cv2.imwrite('gray_example.jpg', gray_img)
# 获取图像尺寸
height, width, channels = img.shape
print(f"Height: {height}, Width: {width}, Channels: {channels}")
pythonimport cv2
# 读取图像并转换为灰度
img = cv2.imread('example.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 使用 Canny 边缘检测
edges = cv2.Canny(gray, 100, 200)
# 显示结果
cv2.imshow('Edges', edges)
cv2.waitKey(0)
cv2.destroyAllWindows()
pythonimport cv2
# 加载预训练的 Haar Cascade 分类器
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')
# 读取图像
img = cv2.imread('example.jpg')
# 转换为灰度
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 检测面部
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), (255, 0, 0), 2)
# 显示结果
cv2.imshow('Faces', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
pythonimport cv2
import numpy as np
# 读取图像
img1 = cv2.imread('image1.jpg', cv2.IMREAD_GRAYSCALE)
img2 = cv2.imread('image2.jpg', cv2.IMREAD_GRAYSCALE)
# 初始化 ORB 检测器
orb = cv2.ORB_create()
# 查找关键点和描述符
kp1, des1 = orb.detectAndCompute(img1, None)
kp2, des2 = orb.detectAndCompute(img2, None)
# 使用 BFMatcher 创建匹配器
bf = cv2.BFMatcher(cv2.NORM_HAMMING, crossCheck=True)
# 匹配描述符
matches = bf.match(des1, des2)
# 按距离排序
matches = sorted(matches, key=lambda x: x.distance)
# 绘制前10个匹配项
img_matches = cv2.drawMatches(img1, kp1, img2, kp2, matches[:10], None, flags=cv2.DrawMatchesFlags_NOT_DRAW_SINGLE_POINTS)
# 显示结果
cv2.imshow('Matches', img_matches)
cv2.waitKey(0)
cv2.destroyAllWindows()
假设你需要在一个视频中检测并跟踪人脸:
pythonimport cv2
# 加载预训练的 Haar Cascade 分类器
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')
# 打开视频文件或摄像头
cap = cv2.VideoCapture('example.mp4')
while cap.isOpened():
ret, frame = cap.read()
if not ret:
break
# 转换为灰度
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# 检测面部
faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30))
# 绘制矩形框
for (x, y, w, h) in faces:
cv2.rectangle(frame, (x, y), (x+w, y+h), (255, 0, 0), 2)
# 显示帧
cv2.imshow('Face Detection', frame)
# 按下 'q' 键退出
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()