OpenCV를 하면서 기본이라고 할 수 있는 카메라 출력을 해볼 것입니다. 우선 완성 코드를 보면
메인코드
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 = cv2.VideoCapture(0)
비디오 출력 클래스(cv2.VideoCapture)를 통해 내장 카메라 또는 외장 카메라에서 정보를 받아올 수 있습니다. cv2.VideoCapture(index)로 카메라의 장치 번호(ID)와 연결합니다. index는 카메라의 장치 번호를 의미합니다.
노트북의 경우, 일반적으로 내장 카메라가 존재하므로 노트북 카메라의 장치 번호는 0이 됩니다.
카메라를 추가적으로 연결하여 외장 카메라를 사용하는 경우, 장치 번호가 1~n까지 순차적으로 할당됩니다.
capture.set(cv2.CAP_PROP_FRAME_WIDTH, 500)
capture.set(cv2.CAP_PROP_FRAME_HEIGHT, 400)
카메라 속성 설정 메서드(capture.set)로 카메라의 속성을 설정합니다.
capture.set(propid, value)로 카메라의 속성(propid)과 값(value)을 설정할 수 있습니다.
propid은 변경하려는 카메라 설정을 의미합니다.
value은 변경하려는 카메라 설정의 속성값을 의미합니다.
예제에서는 카메라의 너비를 500, 높이를 400으로 변경합니다.
while cv2.waitKey(33) < 0:
ret, frame = capture.read()
cv2.imshow("VideoFrame", frame)
반복문(While)을 활용하여 카메라에서 프레임을 지속적으로 받아옵니다.
키 입력 대기 함수(cv2.waitkey)는 지정된 시간 동안 키 입력이 있을 때까지 프로그램을 지연시킵니다.
cv2.waitkey(delay)로 키 입력을 기다립니다. delay는 지연 시간을 의미합니다.
밀리초 단위의 시간 동안 키 입력을 기다리며 그 시간동안 키 입력이 없을 경우 다음 구문을 실행합니다.
키 입력 대기 함수는 입력된 키의 아스키 코드 값을 반환합니다.
즉, 어떤 키라도 입력되기 전까지 33ms마다 반복문을 실행합니다.
- Tip : delay가 0일 경우, 지속적으로 키 입력을 검사하여 프레임이 넘어가지 않습니다.
- Tip : while cv2.waitKey(33) != ord('q'):으로 사용할 경우, q가 입력될 때 while문을 종료합니다.
프레임 읽기 메서드(capture.read)를 이용하여 카메라의 상태 및 프레임을 받아옵니다.
ret은 카메라의 상태가 저장되며 정상 작동할 경우 True를 반환합니다. 작동하지 않을 경우 False를 반환합니다.
frame에 현재 시점의 프레임이 저장됩니다.
이미지 표시 함수(cv2.imshow)를 이용하여 특정 윈도우 창에 이미지를 띄웁니다.
cv2.imshow(winname, mat)으로 윈도우 창의 제목(winname)과 이미지(mat)를 할당합니다.
winname은 문자열로 표시하며, 할당한 문자열이 변수와 비슷한 역할을 합니다.
mat은 이미지를 의미하며, 윈도우 창에 할당할 이미지를 의미합니다.
VideoFrame 이름을 갖는 윈도우 창에 프레임이 표시됩니다.
capture.release()
cv2.destroyAllWindows()
메모리 해제 메서드(capture.relase)로 카메라 장치에서 받아온 메모리를 해제합니다.
모든 윈도우 창 제거 함수(cv2.destroyAllWindows)를 이용하여 모든 윈도우 창을 닫습니다.
만약, 특정 윈도우 창만 닫는다면, cv2.destroyWindow(winname)으로 특정 윈도우 창만 닫을 수 있습니다.
'영상처리 > opencv' 카테고리의 다른 글
OpenCV를 이용해 이미지 출력하기 (0) | 2021.10.26 |
---|---|
OpenCV 를 이용해 도형그리기(직선,원,타원) (0) | 2021.10.12 |
opencv 이미지 출력시 색바뀜 오류 해결(기본) (0) | 2021.10.11 |