Extracting image from video at a given time using OpenCV

后端 未结 3 2031
深忆病人
深忆病人 2021-02-01 09:39

My task is to make a utility that can take a video and time in seconds.

The utility should write out jpeg images from the video with the given input.

E.g. let th

相关标签:
3条回答
  • 2021-02-01 09:52
    import cv2
    
    cap = cv2.VideoCapture('bunny.mp4')
    cap.set(cv2.CAP_PROP_POS_MSEC,1000)      # Go to the 1 sec. position
    ret,frame = cap.read()                   # Retrieves the frame at the specified second
    cv2.imwrite("image.jpg", frame)          # Saves the frame as an image
    cv2.imshow("Frame Name",frame)           # Displays the frame on screen
    cv2.waitKey()                            # Waits For Input
    

    Here, cap.set(cv2.CAP_PROP_POS_MSEC,1000) is responsible for skipping directly to the 1st second in the video (1000th millisecond). Feel free to substitute the value of your choice.

    I have tested the code on OpenCV 3.1.0.

    0 讨论(0)
  • 2021-02-01 10:03

    why don't you just do, what @micka proposed ?

    import cv2
    
    vidcap = cv2.VideoCapture('d:/video/keep/Le Sang Des Betes.mp4')
    vidcap.set(cv2.CAP_PROP_POS_MSEC,20000)      # just cue to 20 sec. position
    success,image = vidcap.read()
    if success:
        cv2.imwrite("frame20sec.jpg", image)     # save frame as JPEG file
        cv2.imshow("20sec",image)
        cv2.waitKey()                    
    
    0 讨论(0)
  • 2021-02-01 10:10
    # Import the necessary packages
    import cv2
    
    vidcap = cv2.VideoCapture('Wildlife.mp4')
    success,image = vidcap.read()
    print success
    #cv2.imwrite("frame.jpg", image) 
    
    count = 0
    framerate = vidcap.get(5)
    print "framerate:", framerate
    framecount = vidcap.get(7)
    print "framecount:", framecount
    vidcap.set(5,1)
    newframerate = vidcap.get(5)
    print "newframerate:", newframerate  
    
    while success:
      success,image = vidcap.read()
      #cv2.imwrite("frame%d.jpg" % count, image) 
    
      getvalue = vidcap.get(0)
      print getvalue
      if getvalue == 20000:
        cv2.imwrite("frame%d.jpg" % getvalue, image)  
    
      #if cv2.waitKey(10) == 27:                     
          #break
      count += 1
    

    The output is as follows

    framerate: 29.97002997
    framecount: 901.0
    newframerate: 29.97002997
    

    Why frame rate is not changing.I want to change frame rate to 1 so that whatever time value user gives i should be able to get image frame.

    0 讨论(0)
提交回复
热议问题