카메라로 실시간 영상 처리 - Python

openCV

# Conda 설치
> conda install opencv

# PIP 설치
> pip install opencv-python

opencv는 VideoCapture을 통해 카메라로 인식된 영상을 처리한다. 

import cv2

cap = cv2.VideoCapture(0)

while cap.isOpened():
    ret, frame = cap.read()
    
    if ret:
        # 정상적으로 정보를 읽었을 때
    else:
        # 정보를 읽지 못 했을 때

cap.release()

VideoCapture의 경우, 사용할 카메라의 인덱스를 넘겨줘야 한다. 만약 연결된 카메라가 2개라면 첫 번째 카메라가 0, 두 번째 카메라는 1이 된다. 

isOpened는 카메라가 정상적으로 열려있다면 True를 반환한다. 따라서 While문의 조건식으로 활용해 카메라가 정상적으로 작동하는 동안 계속해서 코드가 실행되도록 한다. 

read의 return값 ret는 프레임(이미지)이 정상적으로 읽어졌는지 여부(True/False)를 나타낸다. frame은 읽어온 프레임(이미지)이다. 

마지막 release는 사용한 VideoCapture 객체의 사용을 해제한다. 


예시 - 거울 보기

import cv2

cap = cv2.VideoCapture(0)

while cap.isOpened():
    ret, frame = cap.read()
    frame = cv2.flip(frame, 1)
    
    if ret:
        cv2.imshow('frame', frame)

        if cv2.waitKey(1) & 0xFF == ord('q'):
            # 키보드에서 'q'를 입력하면 종료
            break
    else:
        break

cap.release()
cv2.destroyAllWindows()

flip(이미지, 1)은 이미지를 좌우 반전시킨다. (0은 상하반전)

imshow는 해당 이미지를 화면에 보여준다. 실시간으로 불러온 이미지를 화면에 보여주기 때문에 마치 거울을 보는 것과 같은 화면이 재생된다.


imutils

# Conda 설치
> conda install -c conda-forge imutils

# PIP 설치
> pip install imutils

imutils.video.VideoStream을 활용해 카메라 실시간 처리를 하는 방법도 있다. 

import time

from imutils.video import VideoStream

vs = VideoStream(0).start()
time.sleep(2)

while True:
    frame = vs.read()

vs.stream.release()

start를 통해 영상을 처리하는 객체를 활성화한다. 그 후, opencv와 같이 read를 통해 이미지(프레임)를 읽고 release를 통해 객체 사용을 해제한다. 


예시

import time

import cv2
from imutils.video import VideoStream

vs = VideoStream(0).start()
time.sleep(2)

while True:

    frame = vs.read()
    cv2.imshow("Frame", frame)

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

cv2.destroyAllWindows()
vs.stream.release()