📜  如何使用 cv2 检测身体 - Python (1)

📅  最后修改于: 2023-12-03 15:08:18.323000             🧑  作者: Mango

如何使用 cv2 检测身体 - Python

如果您想要使用 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 描述符对象 hog
  • 接着使用 cv2.HOGDescriptor_getDefaultPeopleDetector() 函数来获取一个 SVM 分类器,并将其设置给 hog 描述符对象。
  • 通过 cv2.imread() 函数来加载需要检测的图片。
  • 使用 cv2.resize() 函数将图像大小调整为 640x480 像素。
  • 使用 hog.detectMultiScale() 函数来检测人体,其中 winStridepadding 参数用于控制滑动窗口的大小,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() 函数关闭窗口。

希望以上介绍对您有所帮助。