OpenCV-Python

OpenCV Python 카메라, 동영상 출력

rkftks22 2021. 8. 19. 13:35

opencv 동영상 출력을 다루겠습니다.

 

카메라 출력 : cv2.VideoCapture(index)

index에는 내장 카메라 또는 외장 카메라 장치 번호를 입력합니다. 카메라의 장치 번호의 경우
노트북과 같이 내장 카메라가 탑재되어 있는 경우 내장 카메라를 0번, 그 외의 외장 카메라를 순서대로 +1씩
내장 카메라가 없으시면 0부터 넣으시면 됩니다. 

동영상 불러오기 : cv2.VideoCapture(filename)  

filename : 파일의 상대 경로, 절대 경로를 적어줍니다.

카메라 출력

import cv2

cap = cv2.VideoCapture(0)

while True:
    ret, img = cap.read()

    cv2.imshow('Video', img)
    
    if cv2.waitKey(10) == ord('q'):
        break

cap.release() # 동영상 파일 닫고 메모리 해제

비디오 출력

import cv2

cap = cv2.VideoCapture('videos/04.mp4') # videos 폴더의 04.mp4 파일

while True:
    ret, img = cap.read()

    cv2.imshow('result', img)
    if cv2.waitKey(1) == ord('q'):
        break
        
cap.release() # 동영상 파일 닫고 메모리 해제

 


동영상은 프레임을 읽어 이미지의 형태로 출력합니다.

이미지의 형태는 숫자의 배열로 이루어져 있습니다.

ret : 파일 불러오기에 read()에 성공했다면 True를 반환합니다.

      카메라는 없어도 True가 반환되는 것 같네요.

print(ret)
print(img)

ret, img 출력 결과

 

그렇기 때문에 계속해서 프레임을 읽어 들이기 위해 반복문을 사용하여 동영상을 읽습니다.

 

cv2.waitKey(10) == ord('q')

cv2.waitKey(숫자) == ord('키보드 키') :  숫자를 늘리면 카메라, 동영상 재생 속도가 느려집니다. 

                                                    키보드 키를 출력을 멈추고 출력 화면이 꺼집니다.

0으로 하게 되면 키 입력이 들어오기 전까지 무한정 대기합니다.
설정한 키 외 다른 키를 입력하면 한 프레임만 넘어갑니다.

기본 속성 확인

cv2.CAP_PROP_FRAME_WIDTH : 프레임 너비

cv2.CAP_PROP_FRAME_HEIGHT : 프레임 높이

cv2.CAP_PROP_FPS : 프레임 속도

cap.get(cv2.CAP_PROP__FRAME_WIDTH) : 카메라 영상 프레임 너비를 반환합니다. 

cap.set(cv2.CAP_PROP__FRAME_WIDTH, 480) : 카메라 영상 프레임 너비를 480으로 변환합니다. 

 

import cv2

cap = cv2.VideoCapture(0)
width = cap.get(cv2.CAP_PROP_FRAME_WIDTH) 
height = cap.get(cv2.CAP_PROP_FRAME_HEIGHT) 
print(width) # 640
print(height) # 480

cap.set(cv2.CAP_PROP_FRAME_WIDTH, 320) # cap.set(cv2.CAP_PROP_FRAME_WIDTH, width/2)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 240) # cap.set(cv2.CAP_PROP_FRAME_HEIGHT, height/2)

while True:
    ret, img = cap.read()

    cv2.imshow('result', img)
    if cv2.waitKey(1) == ord('q'):
        break
        
cap.release() # 동영상 파일 닫고 메모리 해제

※ 이때 WIDTH 값과 HEIGHT 값을 너무 이상하게 설정해주면 반영이 되지 않습니다.