每隔10秒从视频文件中捕获一帧

2024-04-19 19:13:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我想每10秒从一个视频文件中捕获一帧,所以如果有人能帮助我,我将非常感谢。我的python代码是这样的:

import cv2


print(cv2.__version__)
vidcap = cv2.VideoCapture('Standoff.avi')
vidcap.set(cv2.CAP_PROP_POS_MSEC,96000)  
success,image = vidcap.read()
count = 0
success = True
while success:
  success,image = vidcap.read()
  print 'Read a new frame: ', success
  cv2.imwrite("frame%d.jpg" % count, image)     # save frame as JPEG file
  cv2.waitKey(200)
  count += 1

Tags: 代码imageimportreadversioncountcv2frame
2条回答

这里我是在10帧转换后捕获帧的。您可以在if条件语句中使用time函数和类似的捕获帧

import cv2

vidcap = cv2.VideoCapture('testing.mp4')
count = 0
success = True
fps = int(vidcap.get(cv2.CAP_PROP_FPS))

while success:
    success,image = vidcap.read()
    print('read a new frame:',success)
    if count%(10*fps) == 0 :
         cv2.imwrite('frame%d.jpg'%count,image)
         print('successfully written 10th frame')
    count+=1

如果您可以从文件中获取视频的帧速率,则以下操作应该可以正常工作(您可能需要检查语法,因为我尚未对其进行测试):

import cv2

cap = cv2.VideoCapture('Standoff.avi')
framerate = cap.get(cv2.cv.CV_CAP_PROP_FPS)
framecount = 0

while(True):
    # Capture frame-by-frame
    success, image = cap.read()
    framecount += 1

    # Check if this is the frame closest to 10 seconds
    if framecount == (framerate * 10)
      framecount = 0
      cv2.imshow('image',image)

    # Check end of video
    if cv2.waitKey(1) & 0xFF == ord('q'):
          break

# When everything done, release the capture
cap.release()
cv2.destroyAllWindows()

相关问题 更多 >