安装和验证OpenCV-Python版本

一、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)

    发表评论