【OpenCV】 카메라 출력
◆ OpenCV를 이용하면 카메라 출력을 쉽게 사용할 수 있다.
◆ 카메라 출력은 카메라가 스트리밍 형태로 동작할 수 있을 때 사용한다.
▶ 즉, 저장된 이미지나 동영상 파일이 아니라 데이터를 실시간으로 받아오고
분석해야 하는 경우 카메라를 이용해 데이터를 처리한다.
◆ 카메라를 사용해 데이터를 받아오기 때문에 연결된 카메라의 장치 번호를 통해 받아오며,
사용중인 플랫폼에서 카메라에 대한 접근 권한이 허용되어야 한다.
---<< 함수 >>-----------------------------------------------------------------------------------------------
◈ capture = cv2.VideoCapture(0)
: 내장 카메라 또는 외장 카메라에서 정보를 받아온다.
▶ cv2.VideoCapture(index) 로 카메라의 장치 번호(ID)와 연결한다.
- index 는 카메라의 장치 번호를 의미한다.
▶ 노트북의 경우, 일반적으로 내장 카메라가 존재하므로 노트북 카메라의 장치 번호는 0이 된다.
▶ 카메라를 추가적으로 연결하여 외장 카메라를 사용하는 경우, 장치 번호가 1~n까지 순차적으로 할당된다.
---< 예제 : Camera_Read.py >--------------------------------------------
import cv2
capture = cv2.VideoCapture(0)
capture.set(cv2.CAP_PROP_FRAME_WIDTH, 640)
capture.set(cv2.CAP_PROP_FRAME_HEIGHT, 480)
while cv2.waitKey(33) < 0:
ret, frame = capture.read()
cv2.imshow("VideoFrame", frame)
capture.release()
cv2.destroyAllWindows()
----------------------------------------------------------------------------------------------------------
◆ capture.set(cv2.CAP_PROP_FRAME_WIDTH, 640)
capture.set(cv2.CAP_PROP_FRAME_HEIGHT, 480)
▶ 카메라 속성 설정 메서드(capture.set)로 카메라의 속성을 설정한다.
▶ capture.set(propid, value)로 카메라의 속성(propid)과 값(value)을 설정할 수 있다.
▶ propid은 변경하려는 카메라 설정을 의미한다.
▶ value은 변경하려는 카메라 설정의 속성값을 의미한다.
◆ while cv2.waitKey(33) < 0:
ret, frame = capture.read()
cv2.imshow("VideoFrame", frame)
▶ 반복문(While)을 활용하여 카메라에서 프레임을 지속적으로 받아론다.
▶ 키 입력 대기 함수(cv2.waitkey)는 지정된 시간 동안 키 입력이 있을 때까지 프로그램을 지연시킨다.
▶ cv2.waitkey(delay)로 키 입력을 기다린다.
- delay는 지연 시간을 의미한다.
- 밀리초 단위의 시간 동안 키 입력을 기다린다.
- waitKey의 리턴 값은 입력된 키의 아스키 코드 값을 반환한다.
▶ 만약 키 입력이 없을 경우 -1을 리턴합니다. 다음 구문을 실행한다.
▶ 위 예제는 어떤 키라도 입력되기 전까지 33ms마다 반복문을 실행한다.
Tip : delay가 0일 경우, 지속적으로 키 입력을 검사하여 프레임이 넘어가지 않는다(무한대기).
Tip : while cv2.waitKey(33) != ord('q'):으로 사용할 경우, q가 입력될 때 while문을 종료한다.
◆ cv2.imshow(winname, mat)
: 윈도우 창의 제목(winname)과 이미지(mat)를 할당한다.
▶ winname은 문자열로 표시하며, 할당한 문자열이 변수와 비슷한 역할을 한다.
▶ mat은 이미지를 의미하며, 윈도우 창에 할당할 이미지를 의미한다.
◆ capture.release()
: 메모리 해제 메서드(capture.relase)로 카메라 장치에서 받아온 메모리를 해제한다.
◆ cv2.destroyAllWindows()
: 모든 윈도우 창을 닫는다.
- 만약, 특정 윈도우 창만 닫는다면, cv2.destroyWindow(winname)으로 특정 윈도우 창만 닫을 수 있다.
---<< 예제 : Take_picture.py 카메라로 사진찍기>>------------------------------------------------------------------
import cv2
cap=cv2.VideoCapture(0) # 0번 카메라에 연결
if cap.isOpened():
while True:
ret, img=cap.read() # 카메라를 읽습니다
if ret:
cv2.imshow('camera',img) # 이미지를 표시합니다
if cv2.waitKey(10) != -1: # 10ms동안 키 입력을 대기
cv2.imwrite('photo.jpg', img) # 사진을 저장
break # 키가 입력되면 중지합니다
else:
print("can't open camera")
cap.release()
cv2.destroyAllWindows()
---------------------------------------------------------------------------------------------------------
---<< 예제 : Record_video.py 카메라로 녹화하기>>------------------------------------------------------------------
import cv2
cap = cv2.VideoCapture(0)
if cap.isOpened:
file_path = './rec.avi'
fps =
fourcc = cv2.VideoWriter_fourcc(*'DIVX') # 인코딩 포맷
width = cap.get(cv2.CAP_PROP_FRAME_WIDTH)
height = cap.get(cv2.CAP_PROP_FRAME_HEIGHT)
size = (int(width), int (height)) # 프레임 크기
out = cv2.VideoWriter(file_path, fourcc, fps, size)
while True:
ret, img = cap.read()
if ret:
cv2.imshow('camera-recording', img)
out.write(img) # 화면 저장
if cv2.waitKey(int(1000/fps)) != -1:
break
else:
print('no file!')
break
out.release() # 종료
else:
print("Can`t open camera!")
cap.release()
cv2.destroyAllWindows()
-------------------------------------------------------------------------------------------