2017-05-23 1 views
0

저는 비디오 처리를 위해 openCv를 사용하고 있습니다. 내가하는 일은 비디오 프레임을 프레임 단위로 읽은 다음 각 프레임에 일부 처리를 적용한 다음 새로운 수정 된 프레임을 표시하는 것입니다. 내 코드는 다음과 같습니다.opencv없이 파이썬에 비디오를 표시 하시겠습니까?

video_capture = cv2.VideoCapture('video.mp4') 


while True: 
# Capture frame-by-frame 
    ret, frame = video_capture.read() 

# Applying some processing to frame 
       . 
       . 
       . 
# Displaying the new frame with processing 
    img=cv2.imshow('title', frame) 

    if cv2.waitKey(1) & 0xFF == ord('q'): 
     break 

이렇게하면 처리 된 비디오를 즉시 표시 할 수 있습니다. 문제는 디스플레이가 '대기'의 존재로 인해 뒤쳐져 있다는 것입니다. 비디오를 형성하기 위해 실시간으로 이미지를 표시하는 다른 방법이 있지만 cv2가 아닌 다른 모듈이 있습니까?

+0

동영상의 프레임 속도는 무엇입니까? –

+1

또한 귀하의 결론을 뒷받침 할 측정을 해 보셨습니까? 나는 프레임 처리가 시간을 지배하고 있다고 생각한다. 그건 그렇고, 난 더 이상의 문제를 참조하십시오 : a) 어떤 일관된 재생 시점에서의 시도 없음 ('VideoCapture'는 단지 파일 읽기/디코딩) b) 처리 된 프레임의 버퍼링 없음 c) 동일한 스레드에서의 처리와 표시. IMHO 당신은 먼저 그 문제를 해결해야합니다. –

+0

네가 처리의 대부분으로 지연되는 부분이 옳다. 즉, 아무런 처리 없이도 opencv로 비디오를 읽는 것만으로는 프레임 속도가 느려지 게됩니다. 원본 비디오는 30fps, 처리를 추가하면 opencv 및 6fps로 표시 할 때 17fps를 측정했습니다. 그리고 waitkey는 50ms/프레임을 사용하고 있습니다. 병렬 처리에서 처리 속도를 높이려면 – haffj

답변

0

하나의 옵션은 Tkinter는, 당신은 몇 가지 정보 here를 찾을 수 있습니다 감사합니다. Tkinter와 함께 python-gstreamer와 python-gobject를 사용합니다. 설정하는 것이 훨씬 더 복잡하지만 더 많은 사용자 정의 옵션을 허용합니다.

관련 문제