티스토리 뷰
void skin_color_processor(Mat img, Mat face) { // 각 픽셀을 읽어서 그 픽셀이 skin인지 판별
for (int i = 0; i < img.rows; i++) {
for (int j = 0; j < img.cols; j++) {
if (isskin(img.at<Vec3b>(i, j)))
face.at<uchar>(i, j) = 255; // 흑백 이미지를 만들어줌
}
}
}// 피부 이면 255를 넣는다.
bool isskin_Peer(uchar r, uchar g, uchar b) {
if (!(r > 95 && g > 40 && b > 20))
return false;
else if (!(abs(r - b) > 15 && r > g && r > b))
return false;
else {
uchar mx = max(r, g);
uchar mn = min(r, b);
if (max(mx, b) - min(mn, b) <= 15)
return false;
else return true;
}
}// 너무 파란 , 초록 얼굴이면 아니다 이런 모든 조건을 통과하면 skin이다
bool isskin(Vec3b px3) {
return isskin_Peer(px3[2], px3[1], px3[0]);
// R G B
}
위의 함수를 끼우면 실행이 된다.
기존의 img(원본사진)에다가 skin_color_processor를 덮으면 face라는 이미지가 만들어진다.
이를 imshow("피부",face); 한다면 피부가 검출된다.
대체로 얼국 인식하는데 쓰인다.
'3학년 2학기 > openCV' 카테고리의 다른 글
background (3) | 2016.12.05 |
---|---|
Image segmentation (0) | 2016.12.05 |
공간 필터링 (0) | 2016.10.15 |
opencv 영상 (0) | 2016.10.15 |
픽셀 (0) | 2016.10.13 |