Python/파이썬 OpenCV 공부

[파이썬 OpenCV] 특정 색상 영역 추출 - cv2.inRange

AI 꿈나무 2020. 9. 28. 17:44
반응형

황선규 박사님의 OpenCV 강의를 공부하면서 정리하였습니다.

황선규 박사님의 'OpenCV 4로 배우는 컴퓨터 비전과 머신 러닝'를 바탕으로 제작하였습니다.

 


특정 색상 영역 추출

 특정 색상 영역 추출할 때 HSV 색 공간을 이용하는게 좋습니다.

 RGB는 어두운 사진에서 색상 영역 추출하면 잘 되지 않습니다.

 HSV는 H,S로 색상을 조절하고 V는 밝기를 조절하므로 H와 S 범위만 지정해 준다면 어두운 영상에서도 색상 영역 추출을 할 수 있습니다.

 

 따라서 BGR 영상을 HSV로 전환하고 색상 영역 추출을 해야 합니다.

 

1. 특정 범위 안에 있는 행렬 원소 검출 - cv2.inRange()

 OpenCV에서 제공하는 cv2.inRange 함수를 사용하여 특정 생삭 영역을 추출할 수 있습니다.

 

[함수 설명]

cv2.inRange(src, lowerb, upperb, dst=None) -> dst

• src: 입력 행렬
• lowerb: 하한 값 행렬 또는 스칼라
• upperb: 상한 값 행렬 또는 스칼라
• dst: 입력 영상과 같은 크기의 마스크 영상. (numpy.uint8) 범위 안에 들어가는 픽셀은 255, 나머지는 0으로 설정

 

[예제 코드]

src = cv2.imread('candies.png')

if src is None:
    print('Image load failed!')
    sys.exit()

src_hsv = cv2.cvtColor(src, cv2.COLOR_BGR2HSV)

dst1 = cv2.inRange(src, (0, 128, 0), (100, 255, 100))
dst2 = cv2.inRange(src_hsv, (50, 150, 0), (80, 255, 255))

cv2.imshow('src', src)
cv2.imshow('dst1', dst1)
cv2.imshow('dst2', dst2)
cv2.waitKey()

cv2.destroyAllWindows()

 

[결과]

기본 영상
RGB 녹색 영역 추출
HSV 녹색 영역 추출

 HSV 색 공간에서 녹색 영역 추출이 잘 된다는 것을 확인할 수 있습니다.

 

반응형