cv2.VideoCapture.set() 有替代函数吗?
Is there an alternative function to cv2.VideoCapture.set()?
我正在使用线路分析器测试我的算法的代码性能
%lprun -f track()
Timer unit: 1e-06 s (µs)
Total time: 1724.82 s
Line # Hits Time Per Hit % Time Line Contents
==============================================================
138 1 35075.0 35075.0 0.0 video = cv2.VideoCapture(input_video_path)
139 1 6.0 6.0 0.0 frame_i = 0
142
143 927 4004.0 4.3 0.0 for img in frames:
144 926 294117.0 317.6 0.0 print('Percentage of video processed : {}'.format(round( (currentFrame / total) * 100, 2)))
145 # capture frame-by-frame
146 926 545906580.0 589531.9 31.7 video.set(1, currentFrame);
147 # ret, img = video.read()
148 926 9046.0 9.8 0.0 frame_i += 1
并对 video.set(1, currentFrame)
花费 31.7% 的时间感到惊讶(545.9 秒)。
这个功能到底是做什么的,有没有替代品可以节省大约 9 分钟?
编辑这里是整个 code 和线分析器
set(1, ...)
表示 cv.CAP_PROP_POS_FRAMES
。您应该 使用命名常量,而不是幻数。
这个做的在视频文件中叫做“求”。
在视频文件中查找的成本很高,因为必须找到最近的前一个关键帧,然后解码可能的多个帧直到所需的点。任何图书馆都必须付出努力。这不是OpenCV的错。
如果您想要尽可能快,您必须将视频转码为仅帧内格式。然后,只有特定的帧必须被解码。您可以使用不带 B 帧或 P 帧(仅 I 帧)的 H.264,也可以使用 MJPEG。
一般来说,您应该避免寻找。逐帧阅读视频,不要跳来跳去,更不要“跳到下一帧”。
我正在使用线路分析器测试我的算法的代码性能
%lprun -f track()
Timer unit: 1e-06 s (µs)
Total time: 1724.82 s
Line # Hits Time Per Hit % Time Line Contents
==============================================================
138 1 35075.0 35075.0 0.0 video = cv2.VideoCapture(input_video_path)
139 1 6.0 6.0 0.0 frame_i = 0
142
143 927 4004.0 4.3 0.0 for img in frames:
144 926 294117.0 317.6 0.0 print('Percentage of video processed : {}'.format(round( (currentFrame / total) * 100, 2)))
145 # capture frame-by-frame
146 926 545906580.0 589531.9 31.7 video.set(1, currentFrame);
147 # ret, img = video.read()
148 926 9046.0 9.8 0.0 frame_i += 1
并对 video.set(1, currentFrame)
花费 31.7% 的时间感到惊讶(545.9 秒)。
这个功能到底是做什么的,有没有替代品可以节省大约 9 分钟?
编辑这里是整个 code 和线分析器
set(1, ...)
表示 cv.CAP_PROP_POS_FRAMES
。您应该 使用命名常量,而不是幻数。
这个做的在视频文件中叫做“求”。
在视频文件中查找的成本很高,因为必须找到最近的前一个关键帧,然后解码可能的多个帧直到所需的点。任何图书馆都必须付出努力。这不是OpenCV的错。
如果您想要尽可能快,您必须将视频转码为仅帧内格式。然后,只有特定的帧必须被解码。您可以使用不带 B 帧或 P 帧(仅 I 帧)的 H.264,也可以使用 MJPEG。
一般来说,您应该避免寻找。逐帧阅读视频,不要跳来跳去,更不要“跳到下一帧”。