색상 영역 검출은 말 그대로 사진에서 해당 범위 안의 색상을 표시해줍니다.
cv2.inRange(src, lowerb, upperb [, dst]) [] : 생략 가능
import cv2
import numpy as np
src1 = cv2.imread('imgs/flower.jpg')
src1_hsv = cv2.cvtColor(src1, cv2.COLOR_BGR2HSV)
dst1 = cv2.inRange(src1, (0, 0, 100), (150, 150, 255)) # B : 0 ~ 150, G : 0 ~ 150, R : 100 ~ 255
dst2 = cv2.inRange(src1_hsv, (160, 200, 0), (179, 255, 255)) # H(색상) : 160 ~ 179, S(채도) : 100 ~ 255, V(진하기) : 0 ~ 255
cv2.imshow('src1', src1)
cv2.imshow('dst1', dst1)
cv2.imshow('dst2', dst2)
cv2.waitKey(0)
cv2.destroyAllWindows()
src : 입력 행렬
lowerb : 하한 값 행렬 또는 스칼라
upperb : 상한 값 행렬 또는 스칼라
dst : 입력 영상과 같은 크기의 마스크 영상(numpy.uint8)
범위 안에 들어가는 픽셀은 255, 나머지는 0 => GrayScale 영상으로 출력
dst1 = cv2.inRange(src1, (0, 0, 100), (150, 150, 255)) # B : 0 ~ 150, G : 0 ~ 150, R : 100 ~ 255
R색이 나타나게는 했지만 BGR 성분은 색상 성분이 포함되기 때문에 정확히 표현하기 힘듭니다. HSV 성분이 나타내기 쉽습니다.
dst2 = cv2.inRange(src1_hsv, (160, 200, 0), (179, 255, 255)) # H(색상) : 160 ~ 179, S(채도) : 200 ~ 255, V(진하기) : 0 ~ 255
HSV 채널은 H(Hue) 값이 색상 영역을 표현하는데 0~360이 아닌(마땅한 사진이 없네요) 0~ 180(=0)으로 전 빨간색 성분을 추출하기 위해 160~ 179을 주었고, S는 원의 중심점부터 원의 둘레 부분까지의 거리를 0 ~ 255로 표현한 것으로 좀 더 진한 빨간색을 찾고자 200 ~ 250을 주었습니다. V는 밝기 성분으로 건드리지 않았습니다.
트랙 바를 사용하여 색상 검출
import cv2
import numpy as np
src1 = cv2.imread('imgs/flower.jpg')
src1 = cv2.resize(src1, (0, 0), fx=0.1, fy=0.1)
src1_hsv = cv2.cvtColor(src1, cv2.COLOR_BGR2HSV)
def trackbar(pos):
hmin = cv2.getTrackbarPos('H_min', 'dst')
hmax = cv2.getTrackbarPos('H_max', 'dst')
smin = cv2.getTrackbarPos('S_min', 'dst')
smax = cv2.getTrackbarPos('S_max', 'dst')
dst = cv2.inRange(src1_hsv, (hmin, smin, 0), (hmax, smax, 255))
cv2.imshow('dst', dst)
cv2.imshow('src1', src1)
cv2.namedWindow('dst')
cv2.createTrackbar('H_min', 'dst', 20, 179, trackbar)
cv2.createTrackbar('H_max', 'dst', 50, 179, trackbar)
cv2.createTrackbar('S_min', 'dst', 0, 255, trackbar)
cv2.createTrackbar('S_max', 'dst', 100, 255, trackbar)
trackbar(0)
cv2.waitKey(0)
cv2.destroyAllWindows()
'OpenCV-Python' 카테고리의 다른 글
OpenCV Python 얼굴 검출(dlib) (0) | 2021.09.14 |
---|---|
OpenCV Python 히스토그램 역투영 (0) | 2021.09.01 |
OpenCV Python 히스토그램 평활화 (0) | 2021.08.30 |
OpenCV Python 영상 명암비 조절(정규화) (0) | 2021.08.29 |
OpenCV Python 히스토그램 분석 (0) | 2021.08.29 |