使用python编写一个启用摄像头具有目标跟踪功能的程序
时间: 2024-09-23 19:02:03 浏览: 39
python+opencv+caffe+摄像头做目标检测的实例代码.pdf
在Python中,我们可以使用OpenCV库来编写一个具有目标跟踪功能的摄像头应用程序。OpenCV是一个强大的计算机视觉库,支持多种目标检测算法,如Haar cascades、HOG+SVM以及更现代的深度学习模型如YOLO和SSD。
以下是一个简单的例子,使用OpenCV的`cv2.VideoCapture`和`cv2.CascadeClassifier`实现摄像头实时捕捉并使用预训练的人脸检测模型进行目标跟踪:
```python
import cv2
# 加载预训练的人脸分类器
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')
def on_trackbar_change(val):
# 目标跟踪的阈值,可以根据需要调整
track_threshold = val / 100.0
tracker.setTrackingParams(track_threshold)
cap = cv2.VideoCapture(0) # 使用默认摄像头
while True:
# 读取摄像头帧
ret, frame = cap.read()
if not ret:
break
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# 检测人脸
faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30), flags=cv2.CASCADE_SCALE_IMAGE)
# 对每个检测到的人脸进行跟踪
for (x, y, w, h) in faces:
roi_gray = gray[y:y+h, x:x+w]
roi_color = frame[y:y+h, x:x+w]
# 初始化追踪器,这里使用KCF追踪器(Kalman Filter)
tracker = cv2.TrackerKCF_create()
ok = tracker.init(frame, (x, y, w, h))
while True:
# 更新追踪器的位置
ret, bbox = tracker.update(frame)
if ret:
p1 = (int(bbox[0]), int(bbox[1]))
p2 = (int(bbox[0] + bbox[2]), int(bbox[1] + bbox[3]))
cv2.rectangle(frame, p1, p2, (255, 0, 0), 2, 1)
else:
cv2.putText(frame, "Lost", (100,80), cv2.FONT_HERSHEY_SIMPLEX, 0.75, (0,0,255), 2)
break
# 显示处理后的帧
cv2.imshow('Camera Feed', frame)
# 追踪器参数设置的滑动条回调函数
cv2.setTrackbarPos('Tracker Threshold', 'Camera Feed', int(1 - track_threshold * 100))
key = cv2.waitKey(1) & 0xFF
if key == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
```
在这个示例中,你可以通过移动滑动条调整追踪器的敏感度。运行这个程序后,人脸将在屏幕上被动态跟踪。
阅读全文