Python OpenCV - 2. 카메라 출력

정재욱·2023년 1월 31일
0

OpenCV

목록 보기
1/2
post-thumbnail

메인 코드

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)

capture = cv2.VideoCapture(0) 를 통해 내장 카메라 또는 외장 카메라에서 정보를 받아온다.

cv2.VideoCapture(index) 로 카메라의 장치 번호(ID)와 연결한다. index카메라의 장치 번호를 의미한다.

노트북의 경우, 일반적으로 내장 카메라가 존재하므로 노트북 카메라의 장치 번호는 0이 된다.

카메라를 추가적으로 연결하여 외장 카메라를 사용하는 경우, 장치 번호가 1~n까지 순차적으로 할당된다.


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은 변경하려는 카메라 설정의 속성값을 의미한다.

예제에서는 카메라의 너비를 640, 높이를 480으로 변경한다.


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문을 종료합니다.

프레임 읽기 메서드(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)으로 특정 윈도우 창만 닫을 수 있습니다.


참고 : Daehee YUN Tech Blog

profile
AI 서비스 엔지니어를 목표로 공부하고 있습니다.

0개의 댓글