Ultralytics YOLO27: 加入候补名单。
获取 YOLO 许可
返回 Ultralytics 术语表

OpenCV

OpenCV 是一个开源库,包含 2,500 多种图像处理和计算机视觉算法。了解它的功能、如何与深度学习配合使用,以及相关代码。

OpenCV(开源计算机视觉库)是一个开源库,包含 2,500 多种用于图像处理和计算机视觉 (CV)的优化算法。它可以读写图像和视频、采集摄像头视频流、过滤和变换像素、检测并匹配特征、标定摄像头,以及运行经过训练的神经网络。OpenCV 于 1999 年在 Intel Research 启动,使用 C++ 编写,并提供 Python 和 Java 绑定;自 4.5.0 版起,它采用 Apache 2.0 许可证发布。在 Python 中,可通过 pip install opencv-python 安装并以 cv2 导入,而且它会将每张图像表示为 NumPy 数组。

OpenCV 的功能#

  • 图像和视频 I/O:读写常见图像格式、解码视频文件,以及从摄像头和网络流中采集帧。
  • 图像处理:调整尺寸、转换色彩空间、模糊、锐化、阈值处理和形态学操作;这些都是图像输入模型前的标准预处理步骤。
  • 特征检测与匹配:SIFT 和 ORB 等角点与关键点检测器会找到具有显著特征的点,以便在全景拼接、对象定位和视觉 SLAM 中跨图像匹配。SIFT 专利到期后,于 4.4.0 版进入 OpenCV 主库。
  • 摄像头几何:标定可消除镜头畸变,单应性可校正透视,而立体匹配则可通过两个摄像头恢复深度,应用于机器人和 3D 重建。
  • 视频分析:背景减除可将运动对象与静态场景分离,光流则用于测量像素在帧间的移动情况。
  • 深度神经网络推理:dnn 模块可以加载经过训练的模型(例如 ONNX 格式模型),并在未安装深度学习框架的情况下通过 CPU 或 GPU 运行模型。

这个传统流水线无需任何训练模型,就能找到图像中形状的轮廓:

import urllib.request

import cv2
import numpy as np

# Download a sample image and decode it into a BGR NumPy array
data = urllib.request.urlopen("https://ultralytics.com/images/bus.jpg").read()
image = cv2.imdecode(np.frombuffer(data, np.uint8), cv2.IMREAD_COLOR)

# Classical pipeline: grayscale, blur to suppress noise, then Canny edge detection
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
blurred = cv2.GaussianBlur(gray, (5, 5), 0)
edges = cv2.Canny(blurred, 50, 150)

# Trace connected edge pixels into contours, the outlines of shapes in the scene
contours, _ = cv2.findContours(edges, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
print(f"Image shape: {image.shape}, contours found: {len(contours)}")

它会打印 Image shape: (1080, 810, 3), contours found: 1449:一张 1080×810、包含三个颜色通道的图像,以及从其边缘追踪出的 1,449 条独立轮廓。OpenCV 按蓝绿红 (BGR) 顺序存储颜色通道,因此将图像传给需要 RGB 的库之前,必须先进行 cv2.cvtColor 转换。

OpenCV 与深度学习框架#

OpenCV 与 PyTorch、TensorFlow等深度学习框架在同一流水线的不同阶段发挥作用。OpenCV 负责网络前后的数据预处理和输出工作,包括抓取帧、调整尺寸、绘制结果和写出视频;框架则负责训练并运行其中的卷积神经网络。实时视频应用会对每一帧循环执行这些步骤:

Ultralytics YOLO26可直接接收 OpenCV 的 BGR NumPy 帧,而 results[0].plot() 会以相同格式返回带标注的帧,因此模型无需任何转换即可接入 OpenCV 循环。本示例使用 ultralytics 包中附带的示例图像,运行一次循环:

import cv2
from ultralytics import YOLO
from ultralytics.utils import ASSETS

# OpenCV 将包中附带的示例图像加载为 BGR NumPy 数组
frame = cv2.imread(str(ASSETS / "bus.jpg"))

# YOLO26 直接接收 OpenCV 帧
model = YOLO("yolo26n.pt")
results = model(frame)

# plot() 返回带标注的 BGR 数组,OpenCV 可以显示或保存该数组
annotated = results[0].plot()
cv2.imwrite("bus_annotated.jpg", annotated)

在视频循环中,对来自 cv2.VideoCapture 的每一帧都会运行相同的三个调用,并由 cv2.imshow 或 cv2.VideoWriter 替换 cv2.imwrite。

探索解决方案

体育领域的计算机视觉

体育领域的计算机视觉

了解 Ultralytics YOLO 如何通过球员和球追踪、表现分析、教练洞察及运动员康复,推动体育视觉技术的发展。
了解详情
航空影像计算机视觉

航空影像计算机视觉

使用 Ultralytics YOLO 将无人机和航空影像转化为农业、水产养殖、保护工作和地理空间分析的实时洞察。
了解详情
航空航天中的计算机视觉

航空航天中的计算机视觉

使用 Ultralytics YOLO 将计算机视觉应用于航空航天领域,包括飞机检查、跑道 FOD 检测、机场地面作业和复合材料缺陷检测。
了解详情
安防领域的计算机视觉

安防领域的计算机视觉

使用 Ultralytics YOLO 模型守护每个场所。视觉 AI 可用于周界监控、威胁检测、车牌识别和工作场所安全。
了解详情
机器人领域的计算机视觉

机器人领域的计算机视觉

使用 Ultralytics YOLO 模型提升智能机器的能力。机器人领域的视觉 AI 可用于自主导航、感知、目标跟踪和实时控制。
了解详情
物流中的计算机视觉

物流中的计算机视觉

借助 Ultralytics YOLO 模型优化物流流程。视觉 AI 可用于包裹检查、分拣、车辆跟踪和仓库安全实时监控。
了解详情
零售中的计算机视觉

零售中的计算机视觉

借助 Ultralytics YOLO 模型重新构想零售。视觉 AI 可用于库存跟踪、货架监控、排队管理和更深入的客户洞察。
了解详情
医疗领域的计算机视觉

医疗领域的计算机视觉

借助 Ultralytics YOLO 模型构建医疗解决方案。医疗领域的视觉 AI 可加快医学影像处理、优化诊断并监测患者。
了解详情
制造业中的计算机视觉

制造业中的计算机视觉

利用 Ultralytics YOLO 模型优化制造流程。视觉 AI 可用于质量控制、缺陷检测、个人防护装备合规检查和装配线自动化。
了解详情
汽车领域的计算机视觉

汽车领域的计算机视觉

利用 Ultralytics YOLO 模型在汽车领域应用计算机视觉。视觉 AI 可提升道路安全、驾驶辅助和车辆自动化水平,让道路更智能。
了解详情
农业中的计算机视觉

农业中的计算机视觉

借助 Ultralytics YOLO 模型,将视觉 AI 引入智慧农业。为作物监测、牲畜追踪和精准农业提供支持,从而提高产量并实现更智能的生产。
了解详情

让我们携手构建 AI 的未来!

开启你的旅程,迎接机器学习的未来