반응형
황선규 박사님의 <OpenCV 4로 배우는 컴퓨터 비전과 머신 러닝>을 공부한 내용을 정리했습니다.
히스토그램 역투영을 이용한 살색 영역 검출하기
히스토그램 역투영 하는 방법은 <[파이썬 OpenCV] 히스토그램 역투영 - cv2.calcBackProject, cv2.selectROI>에서 확인할 수 있습니다.
히스토그램 역투영을 이용해서 살색 영역을 검출해 보겠습니다.
1. 기존 영상으로부터 살색에 대한 컬러 히스토그램을 미리 계산하기
마스크 영상은 포토샵으로 제작할 수 있습니다.
# CrCb 살색 히스토그램 구하기
ref = cv2.imread('kids1.png', cv2.IMREAD_COLOR)
mask = cv2.imread('kids1_mask.bmp', cv2.IMREAD_GRAYSCALE)
if ref is None or mask is None:
print('Image load failed!')
sys.exit()
# BGR -> YCrCb 전환
ref_yrcb = cv2.cvtColor(ref, cv2.COLOR_BGR2YCrCb)
# 히스토그램 생성
channels = [1,2] # Cr Cb 속성만 이용
ranges = [0, 256, 0, 256] # Cr, Cb 범위 지정
hist = cv2.calcHist([ref_ycrcb], channels, mask, [128, 128], ranges) # 히스토그램 생성
hist_norm = cv2.normalize(cv2.log(hist + 1), None, 0, 255, cv2.NORM_MINMAX, cv2.CV_8U)
살색에 대한 컬러 히스토그램을 생성했습니다.
2. 입력 영상에서 미리 구한 살색 히스토그램에 부합하는 픽셀을 선별
이제 입력 영상에 히스토그램 역투영을 적용하겠습니다.
# 입력 영상에 히스토그램 역투영 적용하기
src = cv2.imread('kids2.png', cv2.IMREAD_COLOR)
if src is None:
print('Image load failed')
sys.exit()
# 히스토그램 역투영을 위한 BGR -> YCrCb 전환
src_ycrcb = cv2.cvtColor(src, cv2.COLOR_BGR2YCrCb)
# 히스토그램 역투영
backproj = cv2.calcBackProject([src_ycrcb], channels, hist, ranges, 1)
cv2.imshow('src', src)
cv2.imshow('hist_norm', hist_norm)
cv2.imshow('backproj', backproj)
cv2.waitKey()
cv2.destroyAllWindows()
살색 히스토그램을 구해서 입력 영상에 히스토그램 역투영을 했습니다.
반응형
'Python > 파이썬 OpenCV 공부' 카테고리의 다른 글
[파이썬 OpenCV] 영상에 필터링 적용하기 - cv2.filter2D (0) | 2020.09.30 |
---|---|
[파이썬 OpenCV] 파이썬에서 크로마 키 합성하기 - cv2.inRange(), cv2.copyTo() 활용 (2) | 2020.09.29 |
[파이썬 OpenCV] 히스토그램 역투영 - cv2.calcBackProject, cv2.selectROI (0) | 2020.09.29 |
[파이썬 OpenCV] 트랙바를 이용한 특정 색상 영역 추출 - cv2.inRange, cv2.createTrackbar (0) | 2020.09.28 |
[파이썬 OpenCV] 특정 색상 영역 추출 - cv2.inRange (3) | 2020.09.28 |