如何使用OpenCV Python从视频中获取图像

12

我想从视频中获取图像并以'.jpeg'或'.png'格式存储,请告诉我如何使用opencv实现。我的代码是:

import cv2
vidcap = cv2.VideoCapture('video1.mp4')
success,image = vidcap.read()
count = 0;
print "I am in success"
while success:
  success,image = vidcap.read()
  cv2.imwrite("frame%d.jpg" % count, image)     # save frame as JPEG file
  if cv2.waitKey(10) == 27:                     # exit if Escape is hit
      break
  count += 1

我在这里尝试逐帧从视频中获取图像,并将其保存为frame1、frame2、frame3等。


你的代码,如所示,对我来说是有效的。 - John1024
其实我对Python还很陌生,它只是为我生成了一个Python py.bak文件,除了OpenCV之外还有其他依赖项吗,比如“ffmpeg”? - programminglover
Python不会生成.bak文件。这是你的编辑器在做这件事。没有其他依赖项。从命令行中运行python script.py,其中应该将script.py替换为包含代码的文件的名称。OpenCV非常冗长,因此如果代码在终端上产生大量输出,请不要感到惊讶。如果出现问题,Python将生成堆栈跟踪。在这种情况下,请将整个堆栈跟踪复制并粘贴到您的问题中。 - John1024
2个回答

16

这是我用来读取视频并保存帧的方法:

import cv2
import os

def video_to_frames(video, path_output_dir):
    # extract frames from a video and save to directory as 'x.png' where 
    # x is the frame index
    vidcap = cv2.VideoCapture(video)
    count = 0
    while vidcap.isOpened():
        success, image = vidcap.read()
        if success:
            cv2.imwrite(os.path.join(path_output_dir, '%d.png') % count, image)
            count += 1
        else:
            break
    cv2.destroyAllWindows()
    vidcap.release()

video_to_frames('../somepath/myvid.mp4', '../somepath/out')

simple and beatiful ! - Kamornik Cola
你的代码会产生多少帧? - Pegtomous

2
这是我用OpenCV从视频中获取图像的代码。
import cv2
print(cv2.__version__)
vidcap = cv2.VideoCapture("Malar.mp4")
print vidcap.read()
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
  count += 1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接