OpenCV Python:重新启动视频

时间:2017-12-31 05:00:33

标签: python opencv video-capture frame-rate

我是OpenCV和Python的新手,我正在尝试创建一个简单的程序,该程序将读取名为“SixtyFPS.mov”的视频文件,并在视频到达结束时重播该视频。理想情况下,我希望持续不断地进行视频循环。我无法在网上找到这个解决方案,但是我看到的大多数答案都涉及使用cap.set(cv2.CAP_PROP_POS_FRAMES,1)或其他类似的东西来重置帧。如果有人可以向我解释如何使用cap.set功能,以重新启动视频,将非常感激。

.header{
    padding: 0px 0;
    position: relative;
    display: table;
    background-size: 100% 100%;
    width: 1920px;
    height: 600px;
    background-image: url(backgroundheader.png);
    -webkit-background-size: cover;
    -moz-background-size: cover;
    -o-background-size: cover;
    background-size: cover

}

1 个答案:

答案 0 :(得分:0)

这个问题发布已经有一段时间了,但以防万一有人偶然发现了这个答案,这个带有 cap.set() 的代码片段对我有用。我依赖可以找到的文档 here (cpp) 和 here (python)。

import cv2

# Get video handle.
cap = cv2.VideoCapture("path/to/video")
if not cap.isOpened():
  print("Cannot initialize cap.")
  exit()

# Get length of the video.
video_length = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
# Initialize count.
count = 0

# Frames loop.
while True:
  # Check length of the video.
  if count == video_length:
    # Reset to the first frame. Returns bool.
    _ = cap.set(cv2.CAP_PROP_POS_FRAMES, 0)
    count = 0
  
  # Get the frame.
  success, image = cap.read()
  if not success:
    print("Cannot read frame.")
    break

  # do something with the image.
  cv2.imshow("Frame", image)

  # Quit by pressing 'q'.
  if cv2.waitKey(1) & 0xFF == ord('q'):
    break
  count += 1

# Post loop.
cap.release()
cv2.destroyAllWindows()

我使用上面的方法通过组合 ncap.get() 返回了一些 cap.set() 帧数。