파이썬(Python)/opencv

[Python] OpenCV 동영상 파일 재생하기 (화면 사이즈 변경)

끄적끄적아무거나 2022. 3. 17. 18:55
반응형

 

목차

     

     

    OpenCV 동영상 파일 재생하기

     

    앞서 포스트에서 비디오(Video) 파일(mp4)의 영상 정보를 가져오는 방법에 대해 알아보 았습니다. 이번 포스트는 영상 파일의 사이즈 정보를 가져와서 크기를 변경하고 재생하는 코드를 작성하고 설명하겠습니다.

     

    순서는 아래와 같습니다.

     

    • 동영상 불러오기(VideoCapture)
    • 동영상 정보가져오기(cv2.get)
    • 동영상 읽기(cv2.read)
    • 프레임(Frame) 크기 변경하기(cv2.resize)
    • 프레임(Frame) 출력 하기(imshow)

     

    코드는 위 순서대로 진행 되고 각 순서에서 사용되는 파이썬 openCV 함수(Function)은 괄호안에 넣었습니다.

     

     

     

     

     

    OpenCV 동영상 파일 재생하기 실습

     

    예제 코드>>

    import cv2 
    
    Vid = cv2.VideoCapture('car.mp4')
    
    if Vid.isOpened():
    	fps = Vid.get(cv2.CAP_PROP_FPS)
    	f_count = Vid.get(cv2.CAP_PROP_FRAME_COUNT)
    	f_width = Vid.get(cv2.CAP_PROP_FRAME_WIDTH)
    	f_height = Vid.get(cv2.CAP_PROP_FRAME_HEIGHT)
    	
    	print('Frames per second : ', fps,'FPS')
    	print('Frame count : ', f_count)
    	print('Frame width : ', f_width)
    	print('Frame height : ', f_height)
    
    while Vid.isOpened():
    	ret, frame = Vid.read()
    	if ret:
    		re_frame = cv2.resize(frame, (round(f_width/4), round(f_height/4)))
    		cv2.imshow('Car_Video',re_frame)
    		key = cv2.waitKey(10)
    		
    		if key == ord('q'):
    			break
    	else:
    		break
    
    Vid.release()
    cv2.destroyAllWindows()

    3번 라인: 코드와 동일 폴더에 있는 mp4 동영상 파일을 Vid 객체에 저장

    6~9번 라인: 비디오 파일의 정보 불러오기

    17번 라인: 비디오 파일의 값을 읽고 프레임 값이 있으면 프레임과 True를 전달 받음, 없으면 False.

    19번 라인: 이미지를 원본 사이즈에서 변경함. Round로 너비와 높이 값을 반올림 한 이유는 resize 함수는 정수로 값을 받기 때문임. 만일 정수(int) 처리하지 않으면 아래와 같은 에레 메세지 발생 함. 

    20번 라인: imshow 함수로 윈도우명(Window name)과 frame 값을 입력 함.

    21번 라인: 영상 정지를 위한 키 값 "q" 값을 10ms 기다림

     

    에러메세지>>

    Frames per second :  23.976023976023978 FPS
    Frame count :  360.0
    Frame width :  3840.0
    Frame height :  2160.0
    Traceback (most recent call last):
      File "d:\Python\test02\test04.py", line 19, in <module>    
        re_frame = cv2.resize(frame, ((f_width/4), (f_height/4)))
    cv2.error: OpenCV(4.5.5) :-1: error: (-5:Bad argument) in function 'resize'
    > Overload resolution failed:
    >  - Can't parse 'dsize'. Sequence item with index 0 has a wrong type
    >  - Can't parse 'dsize'. Sequence item with index 0 has a wrong type

     

     

    결과>>

     

     

     

     

     

    반응형