2017-09-26 10 views
0

RTSP 피드에서 지정된 시간에 개별 프레임을 가져 오려고합니다.Read() 호출시 OpenCV (Python)가 프레임을 업데이트하지 않음

이 비디오 스트리밍을위한 잘 작동 :

vcap = cv2.VideoCapture(RTSP_URL) 

while(1): 
    ret, frame = vcap.read() 
    cv2.imshow('VIDEO', frame) 
    cv2.waitKey(1) 

그러나 나는 매 초마다 이미지를 촬영하고이 같은 수행하여 저장하려는 경우 :

vcap = cv2.VideoCapture(RTSP_URL) 

for t in range(60): 
    ret, frame = vcap.read() 
    if ret: 
     cv2.imwrite("{}.jpg".format(t), frame) 
    time.sleep(1); 

모든 이미지가 정확하게 모양을 첫 번째 이미지와 동일합니다. 모든 경우 ret == True.

은 (또한이 일주일 전에 나를 위해 잘 작동 한 후 ipython은 다시 설치할 어떻게 나를 필요 뭔가했다) 당신이 cv2.imshow()와 이미지를 표시하지 않은 경우

+0

하면 (프레임 't.jpg') 'cv2.imwrite을 의미합니까'? – zindarod

+0

^^ 예 죄송합니다, 제가 고쳐주었습니다 ... 저는 다른 도서관들 사이로 다시 돌아 왔습니다. 하지만 내 실제 코드에서 cv2.imwrite()했다. – theastrocat

+0

겹쳐 쓰기 된 이후로 반복 될 때마다 이미지't.jpg'의 이름을 변경하고 싶지 않습니다. –

답변

1

cv2.waitKey(1000) 아무것도 할 것입니다. 시도 : 다른 주에

vcap = cv2.VideoCapture(RTSP_URL) 

for t in range(60): 
    ret, frame = vcap.read() 
    cv2.imwrite('{}.jpg'.format(t), frame) 

    # this will activate the waitKey funciton 
    cv2.imshow('preview', frame) 
    cv2.waitKey(1000) 

을 iPython/jupyter는 CV2의 imshow 전체 GUI 기능을 잘 재생되지 않습니다. 예를 들어, 당신은 끝없는 지난 몇 일 동안 그것으로 장난 한 후 키를 누를 때 좋아

if (cv2.waitKey(1000) == 27 & 0xff): break; 
+0

좋아요, 음, cv2.waitKey (1000)을 time.sleep (1)로 대체하면 어떻게 될까요? 나는 아무것도 보이고 싶지 않고 단지 1 초를 기다리고 싶다. – theastrocat

0

에 의해 루프를 중단 할 수없는 경우, 1 초 어떤 이유로 공급을 위해 빠른 충분하지 않습니다.

이 작동합니다 :

vcap = cv2.VideoCapture(RTSP_URL) 

for t in range(60): 
    ret, frame = vcap.read() 
    if ret and t % 1000 == 0: 
     cv2.imwrite("{}.jpg".format(t), frame) 
    time.sleep(0.001)