📅  最后修改于: 2023-12-03 15:36:32.718000             🧑  作者: Mango
OpenCV-Python 是 OpenCV 的 Python 版本,在机器视觉领域非常常用。OpenCV-Python 包含了各种图像处理、计算机视觉、机器学习等模块,其中对动态物体的检测算法尤其突出。本文将介绍如何使用 OpenCV-Python 进行行人检测。
要使用 OpenCV-Python 进行行人检测,首先需要安装 OpenCV-Python 包。可以使用 pip 进行安装,命令如下:
pip install opencv-python
另外,为了方便处理图片和视频,还需要安装 numpy 包。同样可以使用 pip 进行安装,命令如下:
pip install numpy
行人检测的流程分为以下几步:
以下将详细介绍这一流程。
OpenCV-Python 中提供了一些经过训练的分类器,能够对人脸、眼睛和行人等动态物体进行检测。这些分类器可以通过 XML 文件进行加载。在本例中,我们要使用的是行人分类器,其 XML 文件可在 OpenCV 源码中的 data/haarcascades 目录下找到。
import cv2
# 加载 Haar 特征
person_cascade = cv2.CascadeClassifier('data/haarcascades/haarcascade_fullbody.xml')
接下来需要加载要检测的图像。OpenCV-Python 中提供了 cv2.imread() 函数,可以快速读取图像文件。并且,OpenCV-Python 中使用 NumPy 数组来存储图像数据,这使得对图像进行处理变得非常方便。
import cv2
# 加载 Haar 特征
person_cascade = cv2.CascadeClassifier('data/haarcascades/haarcascade_fullbody.xml')
# 加载图像
img = cv2.imread('test.jpg')
在检测行人之前,需要先对加载的图像进行一些处理。一般来说,需要将其转换为灰度图像,因为在灰度图像上的处理效果要好于彩色图像。此外,还可以进行一些直方图均衡、高斯模糊等处理,以提高检测效果。
import cv2
# 加载 Haar 特征
person_cascade = cv2.CascadeClassifier('data/haarcascades/haarcascade_fullbody.xml')
# 加载图像
img = cv2.imread('test.jpg')
# 将图像转为灰度图像
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
在处理好图像后,就可以使用分类器对其进行分类了。OpenCV-Python 中提供了 cv2.CascadeClassifier.detectMultiScale() 函数,即多尺度检测函数,可对图像中的所有行人进行检测。其使用方法如下:
persons = person_cascade.detectMultiScale(
gray,
scaleFactor=1.1,
minNeighbors=5,
minSize=(30, 30),
maxSize=(100, 100)
)
其中各参数的含义如下:
scaleFactor
:图像缩放比例。minNeighbors
:一个目标周围最小的检测次数。minSize
:要检测的最小目标尺寸。maxSize
:要检测的最大目标尺寸。最后一步是将检测到的行人位置标记在图像上并显示。这可以使用 OpenCV-Python 中的 cv2.rectangle() 函数实现。其使用方法如下:
for (x, y, w, h) in persons:
cv2.rectangle(img, (x, y), (x+w, y+h), (0, 255, 0), 2)
roi_gray = gray[y:y+h, x:x+w]
roi_color = img[y:y+h, x:x+w]
# 显示图像
cv2.imshow('img', img)
cv2.waitKey()
import cv2
# 加载 Haar 特征
person_cascade = cv2.CascadeClassifier('data/haarcascades/haarcascade_fullbody.xml')
# 加载图像
img = cv2.imread('test.jpg')
# 将图像转为灰度图像
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 行人检测
persons = person_cascade.detectMultiScale(
gray,
scaleFactor=1.1,
minNeighbors=5,
minSize=(30, 30),
maxSize=(100, 100)
)
# 标记行人位置
for (x, y, w, h) in persons:
cv2.rectangle(img, (x, y), (x+w, y+h), (0, 255, 0), 2)
roi_gray = gray[y:y+h, x:x+w]
roi_color = img[y:y+h, x:x+w]
# 显示图像
cv2.imshow('img', img)
cv2.waitKey()
本文介绍了如何使用 OpenCV-Python 进行行人检测。通过加载分类器、加载图像、处理图像、行人检测、标记行人位置等步骤,成功地实现了对行人的检测和标记。这些技术在计算机视觉和安防等领域有广泛应用。