[opencv] 03. 웹캠 실시간 이미지 처리 후 재생

이지연·2020년 12월 10일

지난 02 수업과 큰 차이는 없는데, 이번에는 노트북에 있는 웹캠을 불러와서 실시간 재생하도록 만들 것입니다.

웹캠 불러오기 : cv2.viVideoCapture()

지난 번에는 VideoCapture()안에 사진이나 동영상 파일을 했습니다.
오늘은 노트북에 있는 웹캠을 불러아야 합니다. 그래서 기본값인 (0)으로 하면 됩니다.

*VideoCapture(0) : 자신의 기기 웹캠 불러옴

stream = cv2.VideoCapture(0)

아래를 들어가보면 VideoCapture 클래스 참조할 수 있는 표가 있습니다.
https://docs.opencv.org/3.4/d8/dfe/classcv_1_1VideoCapture.html

그런데, 이렇게 하면 이상함을 느낍니다.

웹켐이 왼쪽과 오른쪽이 바뀌었습니다!

상하 반전을 위해서 flip을 이용할 것입니다.
그런 다음 웹캠 왼쪽 상단에 현재 시간과 날짜를 함께 보이기 위해서 다음과 같이 써줍니다.

while(stream.isOpened()):
    ret, frame = stream.read()
    
    if ret:
        now = datetime.datetime.now() #현재시간과 날짜
        flip_frame = cv2.flip(frame,1) 
        text_frame = cv2.putText(flip_frame, str(now), (10,30) ,cv2.FONT_HERSHEY_SIMPLEX,1, (0,255,255), 1, cv2.LINE_AA)
        resize_frame = cv2.resize(text_frame , dsize = (1920,1280), interpolation=cv2.INTER_LINEAR) # 키울 그림, dsize - 자신의 해상도 결정 
        cv2.imsho2('cam', resize_frame)
        
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
    else:
        break
        
stream.release() # 현재 잡고 있는 것을 해제
cv2.destroyAllWindows() #opencv를 통해서 켠 창 끄기

그림 반전, 뒤집기해주기 : cv2.flip()

그림이 상하 반전 되었기 때문에 우리는 지금 필요합니다.

0: x축으로 뒤집기, 1:y축으로 뒤집기, -1:두 축 다 뒤집기

flip_frame = cv2.flip(frame,1)

frame 크기 조정 : cv2.resize()

그런데, 다하고 나니 frame크기를 조정할 필요성이 느껴집니다.

resize_frame = cv2.resize(원본 이미지, 결과 이미지 크기, 보간법)

resize_frame = cv2.resize(text_frame ,None, fx=2, fy=2, interpolation=cv2.INTER_LINEAR) 

v. 결과 이미지 크기는 Tuple형을 사용하며, (너비, 높이)를 의미합니다. 설정된 이미지 크기로 변경합니다. 만약 dsize=(0, 0)으로 크기를 설정하지 않은 경우, fx와 fy를 이용하여 이미지의 비율을 조절할 수 있습니다.

fx가 0.3인 경우, 원본 이미지 너비의 0.3배로 변경

v.보간법은 이미지의 크기를 변경하는 경우, 변형된 이미지의 픽셀은 추정해서 값을 할당해야합니다. 보간법을 이용하여 픽셀들의 값을 할당합니다.

profile
Everyday STEP BY STEP

0개의 댓글