2017-05-23 17 views
0

나는 (fps * 초)를 계산할 때보 다 더 많은 이미지를 저장하기 때문에이 코드에 오류가있을 수 있다고 생각합니다. 또한 끝에 NULL 이미지를 저장합니다. 이미지를 저장하는 가장 기본적인 코드 인 것처럼 느껴지며 오류가 무엇인지 모릅니다.코드에서 오류가 발생할 수 있으며 특정 fps에서 opencv로 프레임을 추출 할 수 있습니까?

또한 이미지를 가져 오는 fps 속도를 지정하는 옵션을 원합니다. 사용률이 가장 높은 fps는 1fps입니다. opencv에서이 기능을 지정할 수있는 기능을 찾을 수 없기 때문에 매 초마다 프레임을 저장하는 방식을 고려했습니다. 또 다른 방법은 모든 프레임을 저장하는 것이지만, 매 초마다 프레임을 반복하여 사용할 수 있습니다. 나는이 개념들에 대해 상당히 새롭다. 이러한 접근 방식이 좋으며 코딩을 어떻게 시작해야합니까? 어디에서 시작해야할지 모르겠습니다.

def extractFrames(): 

vidcap = cv2.VideoCapture('video.AVI') 
success,image = vidcap.read() 
count = 0; 
while success: 
    success,image = vidcap.read() 
    cv2.imwrite("%d.jpg" % count, image) 
    count += 1 

답변

0

이것은 당신이 요청하는 일을해야합니다

import time,cv2 
import numpy as np 
def extractFrames(n): 
    """ 
    extract image from a live video frame at n fps, 
    if the n is smaller than the fps of the camera 
    """ 
    vidcap = cv2.VideoCapture('video.AVI') 
    now = time.time() 
    success,image = vidcap.read() 
    real_fps = 1.0/(time.time()-now); 

    if n > real_fps: 
     print('real fps is smaller than what you want , change to less than '+real_fps) 
     return 

    while success: 
     now = time.time() 
     success,image = vidcap.read() 
     cv2.imwrite("%d.jpg" % count, image) 
     ch = 0xFF & cv2.waitKey(1) 
     if ch == 27: 
      break 
     time.sleep((1.0/n) - (time.time() - now)); 


    cv2.destroyAllWindows() 
extractFrames(1) 

P.S :

나는 이벤트 루프 파이 게임같은 라이브러리를 사용하고 OpenCV의의 기능을 대신 그리기 추천