본문 바로가기
파이썬 (Python)/딥러닝 (Deep Learning)

Python opencv 이용하여 카메라 출력 하는 방법 + 이미지 연속으로 출력 하는 방법

by ★√★ 2021. 2. 21.

 안녕하세요, Davey입니다. 오늘 포스팅할 내용은 python의 opencv 라이브러리를 이용하여 카메라를 컨트롤 하고 카메라 출력을 사용할 수 있는 방법에 설명 드리도록 하겠습니다. 카메라 스트리밍 형태라고 이해하시면 됩니다. 

 

 

Python opencv 이용하여 카메라 출력 하는 방법 + 이미지 연속으로 출력 하는 방법 썸네일

 

 

opencv 를 이용한 카메라 연결

: 일단 내장 or 외장 카메라의 정보를 받아 오기 위해서 비디오 출력 클래스(cv2.VideoCapture)를 선언을 하게 됩니다. 

 

test_camera01 = cv2.VideoCapture(0)

 

- 위의 코드를 간단하게 설명을 드리면 cv2.VideoCapture(index)의 코드"0" 이라는 속성값을 집어 넣었다라고 생각하시면 됩니다. "0"은 카메라의 장치 번호(ID)로써, 카메라의 장치 번호를 의미합니다. 보통 노트북의 경우, 일반적으로 내장 카메라가 존재하므로 노트북 카메라의 장치 번호는 0이 되고 카메라를 추가적으로 연결하여 외장 카메라를 사용하는 경우는 장치번호가 1부터 순차적으로 지정할 수가 있습니다. 이 부분은 코드를 실행을 하시면 어떤 장치가 어떤 Index를 가지고 있는지를 확인하셔야 합니다.

 

카메라 출력 사이즈 설정

: 카메라 출력의 사이즈를 변경하는 코드를 설정하는 게 좋습니다. 그렇지 않으면 의도치 않게 작거나 크게 나와서 사용자가 불편을 겪을 수 있기 때문입니다. 이 부분은 아래 코드를 사용하시면 됩니다. 

 

test_camera01.set(cv2.CAP_PROP_FRAME_WIDTH, 1000)
test_camera01.set(cv2.CAP_PROP_FRAME_HEIGHT, 500)

 

- 위의 코드를 간단하게 설명을 드리면, 카메라 속성 값 설정을 하는 메서드 capture.set 를 이용하여 카메라의 속성을 설정할 수 있습니다. capture.set(propid, value)로 카메라의 속성(propid)과 값(value)이 가능합니다.|

 1) propid은 변경하려는 카메라 설정 내용 (Width와 Height 값을 변경하였음)

 2) value은 변경하려는 카메라 설정의 속성값을 의미 (Width : 1000, Height : 500) 설정

 

 

카메라 출력

: 이제 연결과 사이즈를 설정을 했으니까 실제적으로 카메라에서 보여지는 내용을 출려하는 코드를 삽입해보도록 하겠습니다. 이 부분은 아래 코드르 사용하시면 됩니다. 

 

while cv2.waitKey(50) < 0:
    a, b = test_camera01.read()
    cv2.imshow("TEST_Camera Out", b)

# 특정 키를 설정해놓고 그 키를 누르게 되면 종료가 되게 할 수 있음.
# 예) while cv2.waitKey(50) != ord('a'):으로 사용할 경우, a가 입력될 때 while문을 종료함

 

- 이 부분은 저도 공부를 하면서 약간은 헷갈리는 부분이라서 최대한 자세히 설명 드리도록 하겠습니다. 일단 첫째 부분은 While(반복문) 이라는 것은 아실 겁니다. 즉 어떤 조건에 부합할 때까지 반복한다는 것입니다. 이전 포스팅에서 사용한 코드인 "cv2.waitkey(0)" 과 비교해서 설명 드리도록 하겠습니다. 

 

1) cv2.waitkey(50) : 어떤 키라도 입력되기 전까지 50ms마다 반복문을 실행

2) cv2.waitkey(0) : 지속적으로  입력을 검사함

( 입력 대기 함수는 입력된 키의 아스키 코드 값 반환함) 

 

- 눈치가 빠르신 분들은 이미 인지하셨겠지만, 출력하는 프레임을 한 번 출력하고 키 값을 기다리는 경우에는 프레임이 넘어가지 않고, 몇초의 delay를 주게 되면 그 시간 간격으로 프레임을 계속적으로 출력하게 됩니다.

 

- 프레임 읽기 메서드(capture.read)를 이용하여 카메라의 상태 및 프레임을 받아 오게 되는데 받아 오게 되는 속성값은 2가지가 있습니다. 카메라의 작동 상태 여부와 카메라에서 인식하는 프레임입니다. 이 2가지의 속성 값을 받아와서 cv2.imshow를 이용하여 출력을 하는 것입니다. 

 

카메라 출력 종료 시 메모리 반환

: 위에 카메라가 출력을 하고 나서 delay시간 안에 키를 인식을 하게 되어 종료 시 발생하는 이벤트를 설정을 해주셔야 메모리를 반환 시킬 수 있습니다. 그렇지 않으면 불필요한 메모리를 컴퓨터가 잡아 먹게 되는 거죠. 관련 코드는 아래와 같습니다. 

 

# 메모리 해제 메서드 "capture.relase" 를 이용하여 카메라 장치에서 받아온 메모리를 해제함
test_camera01.release()

# 모든 윈도우 창 제거 함수 "cv2.destroyAllWindows" 를 이용하여 모든 윈도우 창을 다음
# 원하는 출력 창만 닫고 싶으면 "cv2.destroyWindow(해당창 이름)으로 닫을 수 있음.

cv2.destroyAllWindows()

 

opencv 카메라 컨트롤 시 발생할 수 있는 에러 (Error) 및 해결 방법

: 아래 사항은 위에 설명 드린 내용을 수행 하시다가 발생할 수 있는 에러에 대한 내용입니다. 위에 코드를 다 이해하시고 코드를 실행을 하는 과정에서 아래와 같은 에러 메세지를 보실 수 있는 데요. 이 에러 메세지가 발생하는 이유는 현재 카메라가 켜져 있지 않아서 발생하는 오류 입니다. 

 

- 만약 데스크탑으로 캠을 사용하시는 경우는 항상 켜져 있는 상황이라 이런 에러가 뜨지 않을 텐데 노트북일 경우에는 자체 내장 카메라를 FN를 이용해서 키지 않는 이상 켜지지 않는 경우가 있습니다. 이럴 경우에는 아래 에러가 뜨며 해결 방법은 너무나도 간단하게 카메라를 키면 바로 에러가 해결이 되는 걸 확인 하실 수 있습니다.

 

 

 

맺음말

: 이상입니다. 사실 카메라 출력이라고 하는데 이미지를 연속적으로 보여주는 형태라고 생각합니다. 그것을 delay를 주냐 안 주냐의 차이라고 생각합니다. 물론 제 생각이 틀렸을 수도 있지만 이 부분은 좀 더 공부해보고 더 확실해지면 자세히 추가 설명 드리도록 하겠습니다. 그럼 이만 마무리 하도록 하겠습니다. 감사합니다. 

 

제 Posting이 조금이나마 정보 전달에 도움이 되셨길 빌며, 되셨다면, 구독, 댓글, 공감 3종 세트 부탁 드립니다. 감사합니다.


[저작권이나권리를 침해한 사항이 있으면 언제든지 Comment 부탁 드립니다검토  수정  삭제 조치 하도록 하겠습니다그리고기재되는 내용은 개인적으로 습득한 내용이므로 오류가 발생할  있을 가능성이 있으므로기재된 내용은 참조용으로만 봐주시길 바랍니다게시물에오류가 있을때도, Comment 달아 주시면검증 결과를 통해수정하도록 하겠습니다.]

728x90

댓글


// 내부링크를 현재창으로 열기 // Open internal links in same tab