跳到主要内容
Python OpenCV 入门与核心用法详解 | 极客日志
Python AI 算法
Python OpenCV 入门与核心用法详解 综述由AI生成 OpenCV 开源计算机视觉库的概念、特性及适用场景,详细说明了 OpenCV-Python 的环境配置与 pip 安装方法。内容涵盖图像读取显示、灰度转换、边缘检测、人脸及车牌识别等核心代码示例,并列举了 OpenCV 主要功能模块及版本冲突解决策略。
片刻 发布于 2026/3/28 更新于 2026/6/2 34 浏览一、OpenCV 的概述
OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习软件库,提供了从基本操作到复杂算法的广泛工具集。无论你是图像处理的新手还是希望提升技能的专业人士,OpenCV 都能成为你的强大助手。它是一个跨平台的库,实现了多种编程语言的接口,包括 Python。它被广泛用于实时图像处理、对象检测、人脸识别、视频分析等领域。
OpenCV 基于 BSD 许可发行,可运行在 Linux、Windows、Android 和 Mac OS 操作系统上。它轻量级且高效,由一系列 C 函数和少量 C++ 类构成,同时提供了 Python、Ruby、MATLAB 等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。OpenCV 用 C++ 语言编写,主要接口也是 C++ 语言,但保留了大量的 C 语言接口。
在计算机视觉项目的开发中,OpenCV 作为大众化的开源库,拥有丰富的常用图像处理函数库,采用 C/C++ 语言编写,能够快速地实现一些图像处理和识别的任务。此外,它还提供了 Java、Python、CUDA 等的使用接口及机器学习的基础算法调用,使得图像处理和图像分析变得更加易于上手。
1.1 关键特性
多平台支持:可运行于 Windows、Linux、MacOS 等多个平台。
丰富的功能:提供了图像处理、视频处理、特征提取、目标检测等强大功能。
高度优化:性能卓越,适用于实时计算机视觉任务。
1.2 适用场景
图像识别(如人脸识别)
视频分析(如运动目标跟踪)
机器学习(如分类和聚类)
1.3 计算机视觉领域方向
人机互动
物体识别
图像分割
人脸识别
动作识别
运动跟踪
机器人
运动分析
机器视觉
结构分析
汽车安全驾驶
二、OpenCV-Python
2.1 概述
OpenCV-Python 是一个用于解决计算机视觉问题的 Python 绑定库。
Python 是由 Guido van Rossum 开发的一种通用编程语言,由于其简单性和代码可读性,它很快就变得非常流行。它使程序员能够在不降低可读性的情况下用更少的代码行来表达思想。与 C/C++ 这样的语言相比,Python 要慢一些。也就是说,使用 C/C++ 可以轻松地扩展 Python,这允许我们用 C/C++ 编写计算密集型代码,并创建可以用作 Python 模块的 Python 包装器。这给了我们两个好处:首先,代码和原始的 C/C++ 代码一样快;其次,用 Python 编写代码比用 C/C++ 更容易。
OpenCV-Python 是原始 OpenCV C++ 实现的 Python 包装器。
OpenCV-Python 使用 Numpy,它是一个高度优化的库,用于使用 MATLAB 风格的语法进行数值操作。所有的 OpenCV 数组结构都被转换为 Numpy 数组和从 Numpy 数组转换而来。这也使得与其他使用 Numpy(如 SciPy 和 Matplotlib)的库集成更加容易。
因为 OpenCV 依赖一些库,如 Numpy 方法等,安装 OpenCV 之前需要先安装 numpy、matplotlib。
2.2 环境要求
在安装 OpenCV 之前,确保您的 Python 环境已正确设置。
OpenCV 支持 Python 3.x 版本,并且需要在您的机器上安装 Python 和 pip。
如果 Python 3.x 版本安装或您的 Python 环境存在问题,可以尝试在虚拟环境中安装 OpenCV。
创建和使用虚拟环境
虚拟环境是一个独立于系统 Python 环境的空间,可以在其中安装和管理 Python 包。按照以下步骤创建和使用虚拟环境:
创建虚拟环境:
python3 -m venv myenv
这将在当前目录下创建一个名为 myenv 的虚拟环境。
激活虚拟环境:
在 Windows 上:
myenv\Scripts\activate
当虚拟环境激活后,终端提示符会显示为 (myenv),表示你现在在虚拟环境中工作。
在虚拟环境中安装 OpenCV:
确保在虚拟环境中后,使用普通的 pip 命令来安装 OpenCV:
pip install opencv-python
Python :确保已安装 Python 3.x 版本。
python --version 或 python3.12 --version
它通常与 Python 一起安装,但如果没有安装 pip,可以通过以下命令安装:
python -m ensurepip --upgrade
2.3 pip 安装 pip3 install opencv-python
安装 opencv-contrib-python(可选)
如果我们要利用 SIFT 和 SURF 等进行特征提取或支持 contrib 模块,需要安装完整版。
pip3 install opencv-contrib-python 或(指定版本号)pip3 install opencv-contrib-python==3.4.2.17
2.4 核心模块和服务器区别 pip install opencv-python
pip install opencv-python-headless
2.5 验证安装 安装完成后,可以通过在 Python 中导入 OpenCV 库来验证安装是否成功。
在 Python 交互式命令行或脚本中输入以下命令:
import cv2
print (cv2.__version__)
**注意:**安装的时候是 opencv_python,但在导入的时候采用 import cv2。
三、OpenCV 的基本用法
3.1 读取和显示图像 import cv2
image = cv2.imread('image.jpg' )
cv2.imshow('Image' , image)
cv2.waitKey(0 )
cv2.destroyAllWindows()
cv2.imread 函数用于读取图像。
cv2.imshow 函数用于显示图像。
cv2.waitKey(0) 使得窗口等待直到用户按下任意键。
cv2.destroyAllWindows 关闭所有 OpenCV 创建的窗口。
3.2 使用 Matplotlib 展示图片 Matplotlib 是 Python 的一个绘图库,里头有各种各样的绘图方法。现在,你可以学习怎样用 Matplotlib 显示图像,你可以放大、保存图像等等。
import numpy as np
import cv2 as cv
from matplotlib import pyplot as plt
img = cv.imread('example.jpg' , 0 )
plt.imshow(img, cmap='gray' , interpolation='bicubic' )
plt.xticks([]), plt.yticks([])
plt.show()
**注意:**彩色图像使用 OpenCV 加载时是 BGR 模式。但是 Matplotlib 是 RGB 模式。所以彩色图像如果已经被 OpenCV 读取,那它将不会被 Matplotlib 正确显示。
import cv2
import numpy as np
import matplotlib.pyplot as plt
img = cv2.imread('example.jpg' )
b, g, r = cv2.split(img)
img2 = cv2.merge([r, g, b])
plt.subplot(121 ); plt.imshow(img)
plt.subplot(122 ); plt.imshow(img2)
plt.show()
cv2.imshow('bgr image' , img)
cv2.imshow('rgb image' , img2)
cv2.waitKey(0 )
cv2.destroyAllWindows()
import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt
img = np.zeros((512 , 512 , 3 ), np.uint8)
cv.line(img, (0 , 0 ), (511 , 511 ), (255 , 0 , 0 ), 5 )
cv.rectangle(img, (384 , 0 ), (510 , 128 ), (0 , 255 , 0 ), 3 )
cv.circle(img, (447 , 63 ), 63 , (0 , 0 , 255 ), -1 )
font = cv.FONT_HERSHEY_SIMPLEX
cv.putText(img, 'OpenCV' , (10 , 500 ), font, 4 , (255 , 255 , 255 ), 2 , cv.LINE_AA)
plt.imshow(img[:, :, ::-1 ])
plt.title('匹配结果' ), plt.xticks([]), plt.yticks([])
plt.show()
3.3 图像灰度化处理 import cv2
image = cv2.imread('example.jpg' )
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
cv2.imshow('Gray Image' , gray_image)
cv2.imwrite('gray_example.jpg' , gray_image)
cv2.waitKey(0 )
cv2.destroyAllWindows()
cv2.cvtColor 函数用于转换图像的颜色空间,这里我们将图像从 BGR 转换为灰度。cv2.COLOR_BGR2GRAY 表示将 BGR 格式图像转换为灰度图。
3.4 边缘检测 edges = cv2.Canny(image, 100 , 200 )
cv2.imshow('Edges' , edges)
cv2.waitKey(0 )
cv2.destroyAllWindows()
3.5 人脸识别 import cv2
face_cascade = cv2.CascadeClassifier('path_to_haarcascade_frontalface_default.xml' )
image = cv2.imread('path_to_image.jpg' )
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray_image, scaleFactor=1.1 , minNeighbors=5 )
for (x, y, w, h) in faces:
cv2.rectangle(image, (x, y), (x+w, y+h), (255 , 0 , 0 ), 3 )
cv2.imshow('Face Detection' , image)
cv2.waitKey(0 )
cv2.destroyAllWindows()
CascadeClassifier 类用于加载预训练的级联分类器。
detectMultiScale 方法用于在图像中检测人脸。
3.6 图像中的车牌识别 import cv2
image = cv2.imread('path_to_image.jpg' )
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
_, thresh = cv2.threshold(gray_image, 150 , 255 , cv2.THRESH_BINARY_INV)
contours, _ = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
for contour in contours:
x, y, w, h = cv2.boundingRect(contour)
if w > 100 and h > 30 :
cv2.rectangle(image, (x, y), (x+w, y+h), (0 , 255 , 0 ), 2 )
cv2.imshow('License Plate Detection' , image)
cv2.waitKey(0 )
cv2.destroyAllWindows()
将图像转换为灰度图。
对图像进行二值化处理。
寻找图像中的轮廓。
根据轮廓的尺寸和位置确定车牌位置。
四、模块介绍 其中 core、highgui、imgproc 是最基础的模块,分别如下:
core 模块实现了最核心的数据结构及其基本运算,如绘图函数、数组操作相关函数等。
highgui 模块实现了视频与图像的读取、显示、存储等接口。
imgproc 模块实现了图像处理的基础方法,包括图像滤波、图像的几何变换、平滑、阈值分割、形态学处理、边缘检测、目标检测、运动分析和对象跟踪等。
对于图像处理其他更高层次的方向及应用,OpenCV 也有相关的模块实现
features2d 模块用于提取图像特征以及特征匹配,nonfree 模块实现了一些专利算法,如 sift 特征。
objdetect 模块实现了一些目标检测的功能,经典的基于 Haar、LBP 特征的人脸检测,基于 HOG 的行人、汽车等目标检测,分类器使用 Cascade Classification(级联分类)和 Latent SVM 等。
stitching 模块实现了图像拼接功能。
FLANN 模块(Fast Library for Approximate Nearest Neighbors),包含快速近似最近邻搜索 FLANN 和聚类 Clustering 算法。
ml 模块机器学习模块(SVM,决策树,Boosting 等等)。
photo 模块包含图像修复和图像去噪两部分。
video 模块针对视频处理,如背景分离,前景检测、对象跟踪等。
calib3d 模块即 Calibration(校准)3D,这个模块主要是相机校准和三维重建相关的内容。包含了基本的多视角几何算法,单个立体摄像头标定,物体姿态估计,立体相似性算法,3D 信息的重建等等。
G-API 模块包含超高效的图像处理 pipeline 引擎。
五、版本冲突
如何解决 OpenCV 与其他库冲突的问题? python -m venv opencv_env
source opencv_env/bin/activate
opencv_env\Scripts\activate
相关免费在线工具 加密/解密文本 使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
RSA密钥对生成器 生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
Mermaid 预览与可视化编辑 基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
随机西班牙地址生成器 随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online
Gemini 图片去水印 基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online
curl 转代码 解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online