OpenCV - VideoWriter FPS
OpenCV - VideoWriter FPS
我正在构建一个脚本,通过 CSV 文件将边界框叠加到我的视频上。每个帧都有 n 个边界框,所以我只是迭代每个帧中的边界框并在帧上绘制 cv2.rectangle
。结果,我为所有帧多次写入一个帧。
虽然我的 VideoWriter 构造函数将 23.97 FPS 作为参数,但生成的 FPS 要低得多。有没有一种算法或方法可以设置适当的 FPS 来补偿写入视频后的 FPS 下降?
下面是我的代码片段:
avg_fws = counter_written/float(total_frames-1)
width = int(video.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(video.get(cv2.CAP_PROP_FRAME_HEIGHT))
fps = video.get(cv2.CAP_PROP_FPS)
fourcc = cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter('data/bounding_videos/%s.avi' % video_file, fourcc, fps * avg_fws, (width,height))
counter = 1
print (counter_written)
while (video.isOpened()):
ret, frame = video.read()
if ret == True:
if len(frames_dict) != 0:
for i in frames_dict[counter].keys():
box_dim = frames_dict[counter][i]
x, y, w, h = box_dim
cv2.rectangle(frame, (x, y), (x+w, y+h), (255, 255, 255), 3)
out.write(frame)
else:
out.write(frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
else:
break
counter += 1
video.release()
out.release()
cv2.destroyAllWindows()
计数器只是让我跟踪/访问帧,avg_fws
是每秒写入的平均帧数,基本上是 total_num_of_frames_written / total_num_of_frames_in_video
。
您的代码存在的问题是,您在 for
循环中为绘制的每个矩形编写多个帧。您需要做的是在一个框架上一次绘制所有矩形,并且只写入一次。可以通过将 out.write(frame)
移出 for
循环来完成。
我正在构建一个脚本,通过 CSV 文件将边界框叠加到我的视频上。每个帧都有 n 个边界框,所以我只是迭代每个帧中的边界框并在帧上绘制 cv2.rectangle
。结果,我为所有帧多次写入一个帧。
虽然我的 VideoWriter 构造函数将 23.97 FPS 作为参数,但生成的 FPS 要低得多。有没有一种算法或方法可以设置适当的 FPS 来补偿写入视频后的 FPS 下降?
下面是我的代码片段:
avg_fws = counter_written/float(total_frames-1)
width = int(video.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(video.get(cv2.CAP_PROP_FRAME_HEIGHT))
fps = video.get(cv2.CAP_PROP_FPS)
fourcc = cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter('data/bounding_videos/%s.avi' % video_file, fourcc, fps * avg_fws, (width,height))
counter = 1
print (counter_written)
while (video.isOpened()):
ret, frame = video.read()
if ret == True:
if len(frames_dict) != 0:
for i in frames_dict[counter].keys():
box_dim = frames_dict[counter][i]
x, y, w, h = box_dim
cv2.rectangle(frame, (x, y), (x+w, y+h), (255, 255, 255), 3)
out.write(frame)
else:
out.write(frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
else:
break
counter += 1
video.release()
out.release()
cv2.destroyAllWindows()
计数器只是让我跟踪/访问帧,avg_fws
是每秒写入的平均帧数,基本上是 total_num_of_frames_written / total_num_of_frames_in_video
。
您的代码存在的问题是,您在 for
循环中为绘制的每个矩形编写多个帧。您需要做的是在一个框架上一次绘制所有矩形,并且只写入一次。可以通过将 out.write(frame)
移出 for
循环来完成。