一、OpenCV
OpenCV 是一个被广泛使用的开源计算机视觉库,它提供了大量的传统图像 处理算法和基于深度学习的计算机视觉算法,以及用于图像和视频处理的方法。
1、特点
- C++核心:OpenCV的核心功能(如图像处理算法、机器学习模型)是用高性能C++编写的,通过编译生成共享库(如
.dll
或.so
文件)。 - Python绑定:通过
cv2.so
(Linux/Mac)或cv2.pyd
(Windows)提供Python接口,这些绑定使用自动生成的封装代码(如PyBind11或SWIG工具)将C++函数暴露给Python。 - NumPy集成:OpenCV-Python的图像数据以NumPy数组(
numpy.ndarray
)形式存储
import cv2
image = cv2.imread("test.jpg") # 返回一个 Height × Width × 3的uint8数组
2、典型应用场景
- 实时人脸识别/表情分析
- 自动驾驶(车道检测、物体追踪)
- 医学图像处理(肿瘤分割)
- AR/VR(姿态估计、3D重建)
- 工业质检(缺陷检测)
二、pip安装
1、安装 Visual C++ Redistributable 2015-2022
OpenCV 4.x 需要 Microsoft Visual C++ Redistributable 2015-2022
dir C:\Windows\System32\vcruntime140.dll 如果文件存在,说明已安装。
2、pip安装v4.12.0
a、安装方法
conda create -n opencv-pip python3.10
conda activate opencv-pip
pip install opencv-python # 基础版本
pip install opencv-contrib-python # 基础 + contrib 扩展
输出:
(opencv-pip) C:\Users\admin>pip install opencv-python
Collecting opencv-python
Downloading opencv_python-4.12.0.88-cp37-abi3-win_amd64.whl.metadata (19 kB)
Collecting numpy<2.3.0,>=2 (from opencv-python)
Downloading numpy-2.2.6-cp310-cp310-win_amd64.whl.metadata (60 kB)
Downloading opencv_python-4.12.0.88-cp37-abi3-win_amd64.whl (39.0 MB)
---------------------------------------- 39.0/39.0 MB 98.5 kB/s eta 0:00:00
Downloading numpy-2.2.6-cp310-cp310-win_amd64.whl (12.9 MB)
---------------------------------------- 12.9/12.9 MB 102.3 kB/s eta 0:00:00
Installing collected packages: numpy, opencv-python
Successfully installed numpy-2.2.6 opencv-python-4.12.0.88
b、对numpy版本要求2.x
opencv-python 4.12.0.88 安装要求:numpy<2.3.0,>=2; python_version >= “3.9”。
3、pip安装v4.5.5
对于要求numpy版本要求 1.x 场景下,例如 paddlepaddle-gpu 3.0.0b1 的安装要求 numpy<2.0,>=1.13。安装opencv-python版本为4.5.5。
a、安装方法
pip install opencv-python==4.5.5.64
Collecting opencv-python==4.5.5.64
Downloading opencv_python-4.5.5.64-cp36-abi3-win_amd64.whl.metadata (18 kB)
Requirement already satisfied: numpy>=1.21.2 in c:\appdata\conda-data\envs\paddle3-p312\lib\site-packages (from opencv-python==4.5.5.64) (1.26.4)
Downloading opencv_python-4.5.5.64-cp36-abi3-win_amd64.whl (35.4 MB)
---------------------------------------- 35.4/35.4 MB 5.4 MB/s eta 0:00:00
Installing collected packages: opencv-python
Attempting uninstall: opencv-python
Found existing installation: opencv-python 4.12.0.88
Uninstalling opencv-python-4.12.0.88:
Successfully uninstalled opencv-python-4.12.0.88
Successfully installed opencv-python-4.5.5.64
b、对numpy版本要求1.x
conda list numpy
# packages in environment at C:\AppData\Conda-Data\envs\paddle3-p312:
#
# Name Version Build Channel
numpy 1.26.4 pypi_0 pypi
4、验证
a、验证OpenCv依赖包
运行 conda list
确保 numpy
版本与 OpenCV 兼容(如 numpy>=1.19
)。
(opencv-pip) C:\Users\admin>conda list opencv
# packages in environment at C:\AppData\Conda-Data\envs\opencv-pip:
#
# Name Version Build Channel
opencv-python 4.12.0.88 pypi_0 pypi
(opencv-pip) C:\Users\admin>conda list numpy
# packages in environment at C:\AppData\Conda-Data\envs\opencv-pip:
#
# Name Version Build Channel
numpy 2.2.6 pypi_0 pypi
b、验证OpenCV版本
python -c "import cv2;print(cv2.__version__)"
输出:4.12.0 或 4.5.5。
c、验证OpenCV实际加载的路径
python -c "import os; import cv2; print(os.path.dirname(cv2.__file__))"
输出:C:\AppData\Conda-Data\envs\opencv-pip\lib\site-packages\cv2
三、主要功能
1. 图像处理(核心功能)
读写图像/视频
img = cv2.imread("image.jpg") # 读取图像
cv2.imwrite("output.jpg", img) # 保存图像
cap = cv2.VideoCapture(0) # 打开摄像头
像素操作与色彩空间转换
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 转灰度
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) # 转HSV
几何变换
resized = cv2.resize(img, (width, height)) # 缩放
rotated = cv2.warpAffine(img, M, (w, h)) # 旋转
滤波与增强
blur = cv2.GaussianBlur(img, (5,5), 0) # 高斯模糊
edges = cv2.Canny(img, 100, 200) # 边缘检测
2. 特征检测与匹配
关键点检测(SIFT、SURF、ORB等)
orb = cv2.ORB_create()
keypoints, descriptors = orb.detectAndCompute(img, None)
特征匹配
bf = cv2.BFMatcher(cv2.NORM_HAMMING, crossCheck=True)
matches = bf.match(des1, des2)
角点检测(Harris、Shi-Tomasi)
corners = cv2.goodFeaturesToTrack(gray, maxCorners=100, qualityLevel=0.01, minDistance=10)
3. 目标检测与识别
传统方法
- Haar级联分类器(人脸检测) face_cascade = cv2.CascadeClassifier(“haarcascade_frontalface_default.xml”)
faces = face_cascade.detectMultiScale(gray, scaleFactor=1.3, minNeighbors=5) - HOG + SVM(行人检测)
深度学习(DNN模块)
net = cv2.dnn.readNetFromTensorflow("model.pb", "config.pbtxt")
blob = cv2.dnn.blobFromImage(img, scalefactor=1.0, size=(300,300))
net.setInput(blob)
detections = net.forward()
4. 视频分析
运动检测
bg_subtractor = cv2.createBackgroundSubtractorMOG2()
fg_mask = bg_subtractor.apply(frame)
光流估计(Lucas-Kanade、Farneback)
flow = cv2.calcOpticalFlowFarneback(prev_gray, next_gray, None, 0.5, 3, 15, 3, 5, 1.2, 0)
视频追踪(KCF、CSRT、MOSSE)
tracker = cv2.TrackerCSRT_create()
tracker.init(frame, bbox)
5. 3D重建与相机标定
相机标定(畸变校正)
ret, mtx, dist, rvecs, tvecs = cv2.calibrateCamera(obj_points, img_points, gray.shape[::-1], None, None)
undistorted = cv2.undistort(img, mtx, dist)
立体视觉(视差图生成)
stereo = cv2.StereoSGBM_create(minDisparity=0, numDisparities=16, blockSize=15)
disparity = stereo.compute(left_img, right_img)
6. 机器学习与深度学习
内置算法
K-Means聚类
criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 10, 1.0)
_, labels, centers = cv2.kmeans(data, K, None, criteria, 10, cv2.KMEANS_RANDOM_CENTERS)
SVM、决策树等(ml
模块)
深度学习支持
- 支持TensorFlow、PyTorch、ONNX模型部署
- 预训练模型(YOLO、SSD、MobileNet等)
7. GUI与可视化
图像显示
cv2.imshow("Window", img)
cv2.waitKey(0) # 等待按键
绘图功能(矩形、文字、多边形)
cv2.rectangle(img, (x,y), (x+w,y+h), (0,255,0), 2)
cv2.putText(img, "Text", (10,30), cv2.FONT_HERSHEY_SIMPLEX, 1, (255,0,0), 2)
8. 特殊功能
图像拼接(全景图生成)
stitcher = cv2.Stitcher_create()
status, panorama = stitcher.stitch([img1, img2, img3])
图像分割(GrabCut、分水岭算法)
mask = np.zeros(img.shape[:2], np.uint8)
bgd_model = np.zeros((1,65), np.float64)
fgd_model = np.zeros((1,65), np.float64)
cv2.grabCut(img, mask, rect, bgd_model, fgd_model, 5, cv2.GC_INIT_WITH_RECT)