#include <cv.h>
#include <highgui.h>
#include <cxcore.h>
#include <stdio.h>
#pragma comment(lib,"cv")
#pragma comment(lib,"cvaux")
#pragma comment(lib,"cxcore")
#pragma comment(lib,"highgui")
int main(int argc, char* argv[])
{
IplImage* img=cvLoadImage("d:\\image\\2_2.bmp");
IplImage* pImg1 = cvCreateImage(cvGetSize(img), img->depth, img->nChannels);//size图像宽高,depth图像元素的位深度,Channels每个元素(像素)的颜色通道数量
IplImage* pImg2 = cvCreateImage(cvGetSize(img), img->depth, img->nChannels);
IplImage* pImg4 = cvCreateImage(cvGetSize(img), img->depth, img->nChannels);
IplImage* pImg5 = cvCreateImage(cvGetSize(img), img->depth, img->nChannels);
cvCvtColor(img,pImg2,CV_BGR2HSV);//rgb->ycbcr色彩空间转换img源图像,pimg2为ycbcr图
/* ycbcr 第二种方法用来检测肤色*/
CvScalar c,d;
for(int HSV_i2=0;HSV_i2<img->height;HSV_i2++){
for(int HSV_j2=0;HSV_j2<img->width;HSV_j2++){
c = cvGet2D(pImg2,HSV_i2,HSV_j2); // get the (i,j) pixel value
//d = cvGet2D(pImg4,ycbcr_i2,ycbcr_j2);
double H,S,V;
H = c.val[0];
S= c.val[1];
V= c.val[2];
// H >= 0.015&&H <=0.085&&S >=20&&V >=80
if(H <= 15&&H>=0&&S >=10&&V >=40)
{
d.val[0] = 255;
d.val[1] = 255;
d.val[2] = 255;
}
else
{
d.val[0] = 0;
d.val[1] = 0;
d.val[2] = 0;
}
cvSet2D(pImg4,HSV_i2,HSV_j2,d);//set the (i,j) pixel value
}
}
cvSaveImage("./HSV.bmp",pImg2);
cvSaveImage("./skin2.bmp",pImg4);
cvNamedWindow("Image",1);
cvNamedWindow("HSV",2);
cvNamedWindow("skin2",1);
cvShowImage("Image",img);
cvShowImage("HSV",pImg2);
cvShowImage("skin2",pImg4);
cvWaitKey(0); //等待按键
cvDestroyWindow("skin2");//销毁窗口
cvDestroyWindow("yHSV");
cvDestroyWindow("Image");//销毁窗口
cvReleaseImage(&pImg4);
cvReleaseImage(&pImg2);
cvReleaseImage( &img ); //释放图像
return 0;
}
评论0