# import the necessary packages from imutils.video import FPS import numpy as np import argparse import imutils import cv2 # 构造参数解析器并解析参数 ap = argparse.ArgumentParser() # 解析我们的命令行参数。对于这个脚本,我们只需要一个开关 --video ,它是我们输入视频文件的路径。 ap.add_argument("-v", "--video", required=True, help="path to input video file") args = vars(ap.parse_args()) # 打开一个指向视频流的指针,并启动FPS定时器 stream = cv2.VideoCapture(args["video"]) fps = FPS().start() # 启动一个我们可以用来测量 FPS 的计时器 # 循环视频文件流中的帧 while True: # 从线程视频文件流中抓取帧 (grabbed, frame) = stream.read() # 如果帧没有被抓取,那么我们已经到达了流的末尾 if not grabbed: break # 调整帧大小并将其转换为灰度(同时仍保留 3 个通道) frame = imutils.resize(frame, width=450) frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) frame = np.dstack([frame, frame, frame]) # 在图像中显示一段文本(这样我们就可以公平地对快速方法进行基准测试) cv2.putText(frame, "Slow Method", (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 0.6, (0, 255, 0), 2) # 显示帧并更新 FPS 计数器 cv2.imshow("Frame", frame) cv2.waitKey(1) fps.update() # 停止定时器,显示FPS信息 fps.stop() print("[INFO] elasped time: {:.2f}".format(fps.elapsed())) print("[INFO] approx. FPS: {:.2f}".format(fps.fps())) # 做一些清理工作 stream.release() cv2.destroyAllWindows()
# 导入必要的包 from imutils.video import FileVideoStream from imutils.video import FPS import numpy as np import argparse import imutils import time import cv2 # 构造参数解析并解析参数 ap = argparse.ArgumentParser() ap.add_argument("-v", "--video", required=True, help="path to input video file") args = vars(ap.parse_args()) # 启动文件视频流线程并允许缓冲区开始填充 print("[INFO] starting video file thread...") fvs = FileVideoStream(args["video"]).start() time.sleep(1.0) # 启动 FPS 计时器 fps = FPS().start() # 循环播放视频文件流中的帧 while fvs.more(): # 从线程视频文件流中抓取帧,调整大小,并将其转换为灰度(同时仍保留 3 个通道) frame = fvs.read() try: frame = imutils.resize(frame, width=450) frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) frame = np.dstack([frame, frame, frame]) # 在frame上显示队列的大小 cv2.putText(frame, "Queue Size: {}".format(fvs.Q.qsize()), (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 0.6, (0, 255, 0), 2) # 显示帧并更新 FPS 计数器 cv2.imshow("Frame", frame) cv2.waitKey(1) fps.update() except: pass # 停止计时器并显示 FPS 信息 fps.stop() print("[INFO] elasped time: {:.2f}".format(fps.elapsed())) print("[INFO] approx. FPS: {:.2f}".format(fps.fps())) # 做一些清理工作 cv2.destroyAllWindows() fvs.stop()
使用方法:
D:\Python37>python jian2.py --video 1/11.mp4
[INFO] starting video file thread...
[INFO] elasped time: 79.63
[INFO] approx. FPS: 199.49
D:\Python37>python jian2.py --video D:\C理论\ti\01060004.mp4
[INFO] starting video file thread...