我是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
}
答案 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()
我使用上面的方法通过组合 n
和 cap.get()
返回了一些 cap.set()
帧数。