<p>当帧数达到<code>cap.get(cv2.cv.CV_CAP_PROP_FRAME_COUNT)</code>时,我可以使用if语句获得循环视频播放,然后将帧数和<code>cap.set(cv2.cv.CV_CAP_PROP_POS_FRAMES, num)</code>重置为相同的值。下面的例子一直在为我循环视频。</p>
<pre><code>import cv2
cap = cv2.VideoCapture('path/to/video')
frame_counter = 0
while(True):
# Capture frame-by-frame
ret, frame = cap.read()
frame_counter += 1
#If the last frame is reached, reset the capture and the frame_counter
if frame_counter == cap.get(cv2.cv.CV_CAP_PROP_FRAME_COUNT):
frame_counter = 0 #Or whatever as long as it is the same as next line
cap.set(cv2.cv.CV_CAP_PROP_POS_FRAMES, 0)
# Our operations on the frame come here
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# Display the resulting frame
cv2.imshow('frame',gray)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# When everything done, release the capture
cap.release()
cv2.destroyAllWindows()
</code></pre>
<p>它还可以重新捕获视频,而不是重置帧数:</p>
<pre><code>if frame_counter == cap.get(cv2.cv.CV_CAP_PROP_FRAME_COUNT):
frame_counter = 0
cap = cv2.VideoCapture(video_name)
</code></pre>
<p>所以至少我可以用<code>cap.set(cv2.cv.CV_CAP_PROP_POS_FRAMES, num)</code>循环视频。如果重置为第零帧而不是第一帧(如avi方法),会发生什么情况?</p>