특정 색상 영역 추출
특정 색상 영역 추출할 때 HSV 색 공간을 이용하는게 좋다.
RGB는 어두운 사진에서 색상 영역 추출하면 잘 되지 않는다. HSV는 H,S로 색상을 조절하고 V는 밝기를 조절하므로 H와 S 범위만 지정해 준다면 어두운 영상에서도 색상 영역 추출을 할 수 있다.
RGB 색 공간에서 녹색 영역 추출하기
명도를 낮췄을 경우
명도를 낮췄을 경우 녹색이 제대로 잡히지 않은 것을 볼 수 있다.
import sys
import numpy as np
import cv2
src = cv2.imread('candies.png') # 원본 이미지
src2 = cv2.imread('candies2.png') # 명도가 낮은 이미지
if src is None:
print('Image load failed!')
sys.exit()
dst1 = cv2.inRange(src, (0, 128, 0), (100, 255, 100))
dst2 = cv2.inRange(src2, (0, 128, 0), (100, 255, 100))
cv2.imshow('src', src)
cv2.imshow('dst1', dst1)
cv2.imshow('src2', src2)
cv2.imshow('dst2', dst2)
cv2.waitKey()
cv2.destroyAllWindows()
HSV 색 공간에서 녹색 영역 추출하기
명도를 낮췄을 경우
HSV의 경우 명도가 낮은 경우에도 제대로 잡아내는 것을 볼 수 있다.
import sys
import numpy as np
import cv2
src = cv2.imread('candies.png') # 원본 이미지
src2 = cv2.imread('candies2.png') # 명도가 낮은 이미지
if src is None:
print('Image load failed!')
sys.exit()
src_hsv = cv2.cvtColor(src, cv2.COLOR_BGR2HSV)
src_hsv2 = cv2.cvtColor(src2, cv2.COLOR_BGR2HSV)
dst1 = cv2.inRange(src_hsv, (50, 150, 0), (80, 255, 255))
dst2 = cv2.inRange(src_hsv2, (50, 150, 0), (80, 255, 255))
cv2.imshow('src', src)
cv2.imshow('dst1', dst1)
cv2.imshow('src2', src2)
cv2.imshow('dst2', dst2)
cv2.waitKey()
cv2.destroyAllWindows()
특정 범위 안에 있는 행렬 원소 검출 - cv2.inRange
cv2.inRange(src, lowerb, upperb, dst=None)
- src : 입력 행렬
- lowerb : 하한 값 행렬 또는 스칼라
- upperb : 상한 값 행렬 또는 스칼라
- dst : 입력 영상과 같은 크기의 마스크 영상 (numpy.uint8)
범위 안에 들어가는 픽셀은 255, 나머지는 0으로 설정
트랙바를 이용한 특정 색상 영역 추출
import sys
import numpy as np
import cv2
src = cv2.imread('candies.png')
if src is None:
print('Image load failed!')
sys.exit()
src_hsv = cv2.cvtColor(src, cv2.COLOR_BGR2HSV)
def on_trackbar(pos):
hmin = cv2.getTrackbarPos('H_min', 'dst')
hmax = cv2.getTrackbarPos('H_max', 'dst')
dst = cv2.inRange(src_hsv, (hmin, 150, 0), (hmax, 255, 255))
cv2.imshow('dst', dst)
cv2.imshow('src', src)
cv2.namedWindow('dst')
cv2.createTrackbar('H_min', 'dst', 50, 179, on_trackbar)
cv2.createTrackbar('H_max', 'dst', 80, 179, on_trackbar)
on_trackbar(0)
cv2.waitKey()
cv2.destroyAllWindows()
'OpenCV' 카테고리의 다른 글
[OpenCV with Python] Filtering : 필터링이란? (0) | 2022.02.01 |
---|---|
[OpenCV with Python] 영상처리 : 히스토그램 역투영 (0) | 2022.02.01 |
[OpenCV with Python] 영상처리 : 히스토그램 평활화 Histogram equalization (0) | 2022.02.01 |
[OpenCV with Python] 영상처리 : 명암비 조절 (0) | 2022.02.01 |
[OpenCV with Python] 영상처리 : 히스토그램 분석 (0) | 2022.02.01 |