利用OpenCV检测肤色
来源:互联网 发布:windows live mail打开 编辑:程序博客网 时间:2024/04/28 08:35
#include <cv.h> #include <highgui.h> // 该接口来至 冰风2009手势识别 // 进行肤色检测 void SkinDetect(IplImage* src,IplImage* dst) { // 创建图像头 IplImage* hsv = cvCreateImage(cvGetSize(src), IPL_DEPTH_8U, 3);//用于存图像的一个中间变量,是用来分通道用的,分成hsv通道 IplImage* tmpH1 = cvCreateImage( cvGetSize(src), IPL_DEPTH_8U, 1);//通道的中间变量,用于肤色检测的中间变量 IplImage* tmpS1 = cvCreateImage(cvGetSize(src), IPL_DEPTH_8U, 1); IplImage* tmpH2 = cvCreateImage(cvGetSize(src), IPL_DEPTH_8U, 1); IplImage* tmpS3 = cvCreateImage(cvGetSize(src), IPL_DEPTH_8U, 1); IplImage* tmpH3 = cvCreateImage(cvGetSize(src), IPL_DEPTH_8U, 1); IplImage* tmpS2 = cvCreateImage(cvGetSize(src), IPL_DEPTH_8U, 1); IplImage* H = cvCreateImage( cvGetSize(src), IPL_DEPTH_8U, 1); IplImage* S = cvCreateImage( cvGetSize(src), IPL_DEPTH_8U, 1); IplImage* V = cvCreateImage( cvGetSize(src), IPL_DEPTH_8U, 1); IplImage* src_tmp1=cvCreateImage(cvGetSize(src),8,3); // 高斯模糊 cvSmooth(src,src_tmp1,CV_GAUSSIAN,3,3); //高斯模糊 // hue色度,saturation饱和度,value纯度 cvCvtColor(src_tmp1, hsv, CV_BGR2HSV );//颜色转换 cvCvtPixToPlane(hsv,H,S,V,0);//分为3个通道 /*********************肤色检测部分**************/ cvInRangeS(H,cvScalar(0.0,0.0,0,0),cvScalar(20.0,0.0,0,0),tmpH1); cvInRangeS(S,cvScalar(75.0,0.0,0,0),cvScalar(200.0,0.0,0,0),tmpS1); cvAnd(tmpH1,tmpS1,tmpH1,0); // Red Hue with Low Saturation // Hue 0 to 26 degree and Sat 20 to 90 cvInRangeS(H,cvScalar(0.0,0.0,0,0),cvScalar(13.0,0.0,0,0),tmpH2); cvInRangeS(S,cvScalar(20.0,0.0,0,0),cvScalar(90.0,0.0,0,0),tmpS2); cvAnd(tmpH2,tmpS2,tmpH2,0); // Red Hue to Pink with Low Saturation // Hue 340 to 360 degree and Sat 15 to 90 cvInRangeS(H,cvScalar(170.0,0.0,0,0),cvScalar(180.0,0.0,0,0),tmpH3); cvInRangeS(S,cvScalar(15.0,0.0,0,0),cvScalar(90.,0.0,0,0),tmpS3); cvAnd(tmpH3,tmpS3,tmpH3,0); // Combine the Hue and Sat detections cvOr(tmpH3,tmpH2,tmpH2,0); cvOr(tmpH1,tmpH2,tmpH1,0); cvCopy(tmpH1,dst); cvReleaseImage(&hsv); cvReleaseImage(&tmpH1); cvReleaseImage(&tmpS1); cvReleaseImage(&tmpH2); cvReleaseImage(&tmpS2); cvReleaseImage(&tmpH3); cvReleaseImage(&tmpS3); cvReleaseImage(&H); cvReleaseImage(&S); cvReleaseImage(&V); cvReleaseImage(&src_tmp1); } int main(int argc, char* argv[]) { IplImage *src=cvLoadImage("hand.jpg", CV_LOAD_IMAGE_COLOR); // cvNamedWindow("src", CV_WINDOW_AUTOSIZE); cvShowImage("src", src); // cvNamedWindow("flip", CV_WINDOW_AUTOSIZE); IplImage *dsc = cvCreateImage(cvGetSize(src), src->depth, 1); // 以x轴翻转 SkinDetect(src, dsc); // cvFlip(src, dsc, 1); cvShowImage("flip", dsc); cvWaitKey(0); cvDestroyAllWindows(); cvReleaseImage(&src); printf("Hello World!/n"); return 0; }
文章来自于:
http://blog.csdn.net/ycc892009/article/details/6516628
0 0
- 利用OpenCV检测肤色
- 肤色检测opencv
- OpenCV肤色检测
- OpenCV中的肤色检测
- OpenCV编程->肤色检测
- OpenCV肤色检测
- 基于OpenCV 肤色检测
- OpenCV中的肤色检测
- OpenCV中的肤色检测
- OpenCV下肤色检测代码
- OpenCV下肤色检测代码
- OpenCV——肤色检测
- OpenCv视频图像肤色检测
- ios--OpenCV--进行肤色检测
- 【新】opencv肤色检测源码
- 基于opencv的肤色检测
- 学习OpenCV——肤色检测
- 学习OpenCV——肤色检测
- (模板)AC自动机
- Spring中@Autowired注解、@Resource注解的区别
- 购买PG霜,请认准官方网站
- 【记录吧】2014.10.13
- (模板)KMP
- 利用OpenCV检测肤色
- 链表的逆序问题
- Linux驱动开发二:自动获得设备节点在/dev/目录下
- 完美C Perfect C 丰胸胶囊
- 单例模式
- Android开发之如何保证Service不被杀掉(broadcast+system/app)
- (模板)后缀数组(lcp和rmq)
- bash中的3种引号
- 黑马程序员------内存管理