꾸준하고 즐겁게

OpenCV 라이브러리로 실시간으로 전달받은 영상 처리하고, 저장하는 코드 본문

카테고리 없음

OpenCV 라이브러리로 실시간으로 전달받은 영상 처리하고, 저장하는 코드

wj9183 2021. 5. 20. 13:03
728x90

블랙박스는 콩글리시다. ㄴㅇㄱ!!

# 캠이나 카메라를 통해 실시간으로 전달받은 영상을 처리하는 코드이다.

import cv2
import numpy as np

# 캠으로부터 데이터 가져온다.
cap = cv2.VideoCapture(0)
# 저장될 영상은 mp4형식이다.
# 캠이 여러대인 경우 인자로 0, 1, 2, 3...을 넣어주면 된다.


# 캠으로부터 정보를 읽어들일 수 없는 경우 에러 메세지를 반환한다.
if cap.isOpened() == False:
    print("Unable to read camera")

# 캠으로부터 정보를 읽어들일 수 있으면,
else:

    # 프레임의 정보 가져와 변수에 저장한다. 
    frame_width = int(cap.get(3))
    frame_height = int(cap.get(4))


    #캠으로 들어온 비디오를 따로 저장한다.
    out = cv2.VideoWriter('data/videos/output.avi',
                        cv2.VideoWriter_fourcc('M', 'J', 'P', 'G'),
                        10,
                        (frame_width, frame_height) )
                        
                        
    # 동영상은 사진을 여러장 이어서 보여주는 개념이다.
    # 1초에 몇 장의 이미지가 들어가는지, fps(frame per second) 단위를 쓴다.
    # 캠으로부터 이미지 한 장만을 받아올 게 아니므로, 반복문을 사용한다.
    while True:
        ret, frame = cap.read()
        if ret == True:
            out.write(frame)
            cv2.imshow('frame', frame)
			#esc를 입력하면, 이미지를 받아오길 멈추게 한다.
            if cv2.waitKey(1) & 0xFF == 27:
                break
        else:
            break
            
            
    # sql 커서와 커넥션을 다 사용하고 나면 연결을 닫아주듯이, 비디오캡쳐도 닫아준다.
    cap.release()
    # 파일도 더 이상 작성하지 않도록 한다.
    out.release()
    
 	#화면에 띄운 창을 닫아준다.
    cv2.destroyAllWindows()

 

캠이나 카메라가 있어야 테스트해볼 수 있다.
만약 카메라 가져오는 거 실패하면 재부팅하고 다시해보는 게 좋다.
눈으로 확인할 수 있는 결과물이 있으니 즐겁다.

728x90