📅  最后修改于: 2023-12-03 15:08:18.323000             🧑  作者: Mango
如果您想要使用 Python 中的 OpenCV (cv2) 库来检测身体,那么您来到了正确的地方。在本文中,我们将分享如何使用 Python 和 OpenCV 来检测身体。
我们可以使用 HOG(方向梯度直方图)和 SVM(支持向量机)算法,这是一个处理图像的经典算法。HOG 算法用于获取图像的特征向量,SVM 用于分类选择特定的物体,比如人体。
首先,我们要安装 opencv-python
库,在命令行中执行以下命令:
pip install opencv-python
接下来,我们将使用以下代码来进行身体检测:
import cv2
# 创建 HOG 描述符对象
hog = cv2.HOGDescriptor()
# 设置 SVM 分类器
hog.setSVMDetector(cv2.HOGDescriptor_getDefaultPeopleDetector())
# 加载图像
image = cv2.imread('image.jpg')
# 调整图像大小
image = cv2.resize(image, (640, 480))
# 检测人体
(rects, weights) = hog.detectMultiScale(image, winStride=(4, 4), padding=(8, 8), scaleFactor=1.05)
# 绘制矩形框
for (x, y, w, h) in rects:
cv2.rectangle(image, (x, y), (x + w, y + h), (0, 255, 0), 2)
# 显示图像
cv2.imshow("Image", image)
cv2.waitKey(0)
以上代码仅是一个简单的示例,您可以在此基础上进行更多的修改和调整。
下面是对上述代码的解释:
hog
。cv2.HOGDescriptor_getDefaultPeopleDetector()
函数来获取一个 SVM 分类器,并将其设置给 hog
描述符对象。cv2.imread()
函数来加载需要检测的图片。cv2.resize()
函数将图像大小调整为 640x480 像素。hog.detectMultiScale()
函数来检测人体,其中 winStride
和 padding
参数用于控制滑动窗口的大小,scaleFactor
控制图像缩放比例。cv2.rectangle()
函数绘制矩形框,并使用 cv2.imshow()
和 cv2.waitKey()
函数显示图像。如果希望检测视频中的人体,可以使用以下代码:
import cv2
# 创建 HOG 描述符对象
hog = cv2.HOGDescriptor()
# 设置 SVM 分类器
hog.setSVMDetector(cv2.HOGDescriptor_getDefaultPeopleDetector())
# 打开摄像头
camera = cv2.VideoCapture(0)
while True:
# 读取视频帧
ret, frame = camera.read()
# 调整图像大小
frame = cv2.resize(frame, (640, 480))
# 检测人体
(rects, weights) = hog.detectMultiScale(frame, winStride=(4, 4), padding=(8, 8), scaleFactor=1.05)
# 绘制矩形框
for (x, y, w, h) in rects:
cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2)
# 显示图像
cv2.imshow('frame', frame)
# 检测键盘按键
k = cv2.waitKey(1) & 0xff
if k == 27:
break
# 释放摄像头
camera.release()
cv2.destroyAllWindows()
在以上代码中,我们使用 cv2.VideoCapture()
函数打开摄像头,然后使用 camera.read()
函数读取一帧视频。在主循环中,我们通过 hog.detectMultiScale()
函数检测人体,然后使用 cv2.rectangle()
函数绘制矩形框,最后使用 cv2.imshow()
函数显示帧。如果按下 ESC 键退出程序,我们使用 camera.release()
函数释放摄像头资源,并使用 cv2.destroyAllWindows()
函数关闭窗口。
希望以上介绍对您有所帮助。