gpt4 book ai didi

python - cap.isOpened() 在命令行返回状态

转载 作者:太空宇宙 更新时间:2023-11-03 21:41:27 26 4
gpt4 key购买 nike

我使用 Python 3.6.5 和 OpenCV 3.4.1 阅读了一个 mp4 视频,并对每一帧进行了一些(资源密集型)计算。

当然,我有帧总数 (length) 和当前帧数 (count),所以我想在我的命令中提供进度更新行,但不幸的是,它仅在整个过程完成后才显示所有内容。

while cap.isOpened():
ret, frame = cap.read()

if ret:
# Calculation stuff
...

# Print the current status
print("Frame %s/%s" % (count, length))

count = count + 1

不幸的是,它只在视频文件完全处理后才打印 ALL。如何打印当前帧的“实时”状态?

我使用 MINGW64 (Windows) 作为我的控制台

最佳答案

乍一看,这是因为您的代码中可能有控制流指令(例如breakcontinue等),阻止口译员到达线路。

因此您应该确保在这些指令之前打印,您的我们可以简单地在顶部打印,例如:

while cap.isOpened():
ret, frame = cap.read()
<b>print("Frame %s/%s" % (count, length))</b>
<b>count += 1</b>

if ret:
# Calculation stuff
# ...
pass

话虽如此,我们可以将这个捕获过程变成一个打印值的生成器,并带有一个漂亮的进度条,例如:

from tqdm import <b>tqdm</b>
from cv2 import <b>CAP_PROP_FRAME_COUNT</b>

def frame_iter(capture, description):
def _itertor():
while capture.grab():
yield capture.retrieve()[1]
return tqdm(
_iterator(),
desc=description,
total=int(capture.get(CAP_PROP_FRAME_COUNT)),
)

然后我们可以像这样使用它:

for frame in frame_iter(capture, 'some description'):
# process the frame
pass

它将显示一个进度条,如 GitHub repository of tqdm 中所示.

关于python - cap.isOpened() 在命令行返回状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50889501/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com