2025-03-08
编程
00
请注意,本文编写于 50 天前,最后修改于 50 天前,其中某些信息可能已经过时。

目录

安装 OpenCV
在 Python 中安装 OpenCV
在 Debian/Ubuntu 系统上安装 OpenCV
在 CentOS/RHEL 系统上安装 OpenCV
在 macOS 上安装 OpenCV
基本用法
高级功能
示例场景

OpenCV(开源计算机视觉库)是一个专注于实时计算机视觉的跨平台库。它提供了数百种计算机视觉算法,广泛应用于图像处理、视频捕捉、分析和机器学习等领域。

安装 OpenCV

在 Python 中安装 OpenCV

OpenCV 提供了 Python 绑定,可以通过 pip 来安装:

bash
pip install opencv-python

如果你还需要额外的功能模块(如 SIFT 和 SURF 等专利算法),可以安装 opencv-contrib-python 包:

bash
pip install opencv-contrib-python

在 Debian/Ubuntu 系统上安装 OpenCV

你可以通过包管理器来安装 OpenCV:

bash
sudo apt-get update sudo apt-get install libopencv-dev python3-opencv

在 CentOS/RHEL 系统上安装 OpenCV

首先,确保你已经安装了 EPEL 仓库:

bash
sudo yum install epel-release

然后安装 OpenCV:

bash
sudo yum install opencv opencv-devel opencv-python

在 macOS 上安装 OpenCV

如果你使用的是 Homebrew 包管理器,可以通过以下命令安装:

bash
brew install opencv

对于 Python 用户,建议通过 pip 安装 OpenCV-Python 包。

基本用法

以下是一些 OpenCV 的基本使用示例:

  1. 读取和显示图像
python
import cv2 # 读取图像 img = cv2.imread('example.jpg') # 显示图像 cv2.imshow('Image', img) # 等待按键事件,保持窗口打开 cv2.waitKey(0) cv2.destroyAllWindows()
  1. 读取和写入视频
python
import 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()
  1. 图像的基本操作
python
import 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}")

高级功能

  1. 边缘检测
python
import 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()
  1. 面部检测
python
import 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()
  1. 图像特征匹配
python
import 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()

示例场景

假设你需要在一个视频中检测并跟踪人脸:

python
import 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()