python用摄像头测量人物身高完整代码
时间: 2023-08-26 11:04:05 浏览: 612
以下是一个基于OpenCV库实现的Python程序,可以使用摄像头测量人物身高。需要注意的是,由于不同的摄像头设备和环境条件可能会导致测量结果的误差,因此本程序仅供参考,具体应用中需要进行校准和调整。
```python
import cv2
import math
# 定义摄像头编号,如果只有一个摄像头可以设置为0
CAMERA_ID = 0
# 定义人物身高(单位:厘米)
PERSON_HEIGHT = 170
# 定义人物检测模型文件路径
CASCADE_FILE_PATH = "haarcascade_fullbody.xml"
# 加载人物检测模型
cascade = cv2.CascadeClassifier(CASCADE_FILE_PATH)
# 打开摄像头
cap = cv2.VideoCapture(CAMERA_ID)
# 循环读取视频帧
while True:
# 读取一帧视频
ret, frame = cap.read()
# 如果视频读取失败则退出循环
if not ret:
break
# 将视频帧转换为灰度图像
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# 使用人物检测模型检测人物位置
rects = cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30), flags=cv2.CASCADE_SCALE_IMAGE)
# 遍历检测结果
for (x, y, w, h) in rects:
# 绘制矩形框显示人物位置
cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2)
# 计算人物像素高度
height = h
# 计算人物与摄像头的距离(单位:厘米)
distance = PERSON_HEIGHT * 100 / height
# 计算人物实际身高(单位:厘米)
person_height = distance * math.sin(math.radians(90 - math.atan(distance / 100)))
# 在图像中显示人物身高
cv2.putText(frame, "Person Height: {:.2f}cm".format(person_height), (x, y - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 1)
# 显示视频帧
cv2.imshow("frame", frame)
# 等待按下ESC键退出循环
key = cv2.waitKey(1)
if key == 27:
break
# 释放摄像头和窗口资源
cap.release()
cv2.destroyAllWindows()
```
在运行程序前,需要先下载人物检测模型文件`haarcascade_fullbody.xml`,并将其与程序放在同一目录下。可以从OpenCV官方GitHub库中获取该文件:
https://github.com/opencv/opencv/blob/master/data/haarcascades/haarcascade_fullbody.xml
运行程序后,将会打开摄像头并显示视频流。当程序检测到人物时,会在图像中绘制矩形框并显示人物身高,按下ESC键可退出程序。
阅读全文