어제보다 나은 내가 되자
히스토그램 역투영을 통한 피부색 영역 검출, calcBackProject 본문
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main() {
Mat src, src_ycrcb, mask;
src = imread("kyeong.jpg");
mask = imread("mask.jpg",IMREAD_GRAYSCALE);
cvtColor(src, src_ycrcb, COLOR_BGR2YCrCb); // BGR to YCrCb in src_ycrcb
Mat hist;
int channels[] = { 1,2 };
int histSize[] = { 128,128 };
float cr_range[] = { 0,256 };
float cb_range[] = { 0,256 };
const float* ranges[] = { cr_range,cb_range };
calcHist(&src_ycrcb, 1, channels, mask, hist, 2, histSize, ranges);
Mat search, search_ycrcb;
search = imread("search.jpg");
cvtColor(search, search_ycrcb, COLOR_BGR2YCrCb);
Mat backproj;
calcBackProject(&search_ycrcb, 1, channels, hist, backproj, ranges, 1, true);
imshow("search", search);
imshow("backproject", backproj);
waitKey();
return 0;
}
mask는 src에 담은 영상에서 살색 부분을 흰색으로 해주고 나머지 영역은 검정색으로 해준 파일을 저장한다.
원본영상에서 mask부분에 해당하는 히스토그램을 구하고 살색 영역을 구할 파일을 search에 불러온다.
calcBackProject함수를 이용하여 구한 히스토그램을 이용해 살색 영역을 추출한다.
'영상처리' 카테고리의 다른 글
적응형 이진화, adaptivethreshold (0) | 2020.05.13 |
---|---|
이진화, threshold (0) | 2020.05.13 |
특정 색상 영역 분할, inRange (0) | 2020.05.13 |
컬러 영상 히스토그램 평활화 (0) | 2020.05.13 |
B, G, R 채널 분리 (0) | 2020.05.13 |