可以使用OpenCV的内置跟踪器,效果可能因环境和跟踪对象而异。如果跟踪效果不理想,您可以尝试其他类型的跟踪器,如MOSSE、CSRT等。跟踪可能会在物体快速移动、遮挡或光线变化时失效。
具体实现代码如下:
import cv2 def initialize_tracker(frame): """初始化跟踪器并选择ROI""" tracker = cv2.TrackerKCF_create() roi = cv2.selectROI('Select ROI', frame, False) tracker.init(frame, roi) return tracker, roi def main(): # 初始化视频捕获 cap = cv2.VideoCapture(0) # 使用默认摄像头,如果有多个摄像头,可以尝试更改这个数字 if not cap.isOpened(): print("无法打开摄像头") exit() # 读取一帧图像 ret, frame = cap.read() if not ret: print("无法获取图像") cap.release() exit() # 初始化跟踪器并选择ROI tracker, roi = initialize_tracker(frame) tracking = True # 主循环 while True: ret, frame = cap.read() if not ret: print("无法获取图像") break if tracking: # 更新跟踪器 success, box = tracker.update(frame) if success: # 绘制边界框 x, y, w, h = [int(v) for v in box] cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 2) else: cv2.putText(frame, "Tracking failure detected", (100, 80), cv2.FONT_HERSHEY_SIMPLEX, 0.75, (0, 0, 255), 2) # 显示帧 cv2.imshow('Tracking', frame) # 等待键盘输入 key = cv2.waitKey(1) & 0xFF if key == ord('q'): # 按 'q' 退出 break elif key == ord('r'): # 按 'r' 重新选择ROI cv2.destroyWindow('Select ROI') tracker, roi = initialize_tracker(frame) tracking = True # 释放资源 cap.release() cv2.destroyAllWindows() if __name__ == "__main__": main()
网友回复
如何编写一个chrome插件实现多线程高速下载大文件?
cdn版本的vue在网页中出现typeerror错误无法找到错误代码位置怎么办?
pywebview能否使用webrtc远程控制共享桌面和摄像头?
pywebview6.0如何让窗体接受拖拽文件获取真实的文件路径?
如何在linux系统中同时能安装运行apk的安卓应用?
python有没有离线验证码识别ocr库?
各家的ai图生视频及文生视频的api价格谁最便宜?
openai、gemini、qwen3-vl、Doubao-Seed-1.6在ui截图视觉定位这款哪家更强更准?
如何在linux上创建一个沙箱隔离的目录让python使用?
pywebview如何使用浏览器自带语音识别与webspeech 的api?