728x90
안녕하세요.
이번 시간에는 Python으로 OpenCV를 사용해서 특정 색을 인식하는 예제를 진행해보겠습니다.
색깔을 분별하는 방법은 HSV로 했습니다. HSV는 색상(H), 채도(S), 명도(V)의 값을 주어서 색을 표현하는 방법입니다.
다음 그림과 같이 HSV 색 공간을 원뿔로 표현할 수 있습니다.
예제를 진행해보겠습니다.
먼저 인식하고자 하는 색의 HSV 범위를 입력합니다.
예제에서는 범위를 H(15),S(150),V(20) ~ H(35),S(255),V(255) 로 주어서 노란색을 인식하도록 했습니다.
예제 코드입니다.
import cv2
import numpy as np
# numpy 배열로 hsv 형식의 색 범위를 정해줍니다.
# 노란색으로 범위를 정해주었습니다.
lower = np.array([15, 150, 20])
upper = np.array([35, 255, 255])
# 카메라를 연결합니다.
webcam_video = cv2.VideoCapture(0)
while True:
# 카메라의 프레임을 읽고 가져옵니다.
success, video = webcam_video.read()
# RGB 형식의 카메라 프레임을 HSV 형식으로 변환합니다.
img = cv2.cvtColor(video, cv2.COLOR_BGR2HSV)
# 정한 범위 내의 색을 표시해줍니다.
mask = cv2.inRange(img, lower, upper)
# 표시된 것에서 윤곽선을 찾습니다.
mask_contours, hierarchy = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
# 모든 윤곽선의 위치를 찾습니다.
if len(mask_contours) != 0:
for mask_contour in mask_contours:
if cv2.contourArea(mask_contour) > 500:
x, y, w, h = cv2.boundingRect(mask_contour)
# 사각형을 그려줍니다.
cv2.rectangle(video, (x, y), (x + w, y + h), (0, 0, 255), 3)
cv2.imshow("mask image", mask)
cv2.imshow("window", video)
# ESC 키를 누르면 프로그램이 종료됩니다.
if cv2.waitKey(1) & 0xFF == 27:
break
webcam_video.release()
cv2.destroyAllWindows()
결과는 다음과 같습니다.
'Python' 카테고리의 다른 글
[Python] 구글 speech to text api를 사용해 긴 텍스트를 오디오 파일로 변환하고 웹 브라우저에서 재생하기 (0) | 2023.08.25 |
---|---|
[Python] Flask 를 이용해 웹 서버 실행시키기 (0) | 2023.08.24 |
[python] 자연어 처리를 위한 텍스트 전처리(정수 인코딩) (0) | 2023.08.09 |
[Python] OpenCV 라이브러리로 이미지에 도형 그리기 (0) | 2023.07.30 |
[python] 자연어 처리를 위한 텍스트 전처리(불용어 제거) (0) | 2023.07.28 |