opencv-根据颜色进行目标检测

Code:
  1. #include <cv.h>   
  2. #include <highgui.h>   
  3.   
  4. // 该接口来至   冰风2009手势识别    
  5. // 进行肤色检测   
  6. void SkinDetect(IplImage* src,IplImage* dst)   
  7. {   
  8.     // 创建图像头   
  9.     IplImage* hsv = cvCreateImage(cvGetSize(src), IPL_DEPTH_8U, 3);//用于存图像的一个中间变量,是用来分通道用的,分成hsv通道   
  10.     IplImage* tmpH1 = cvCreateImage( cvGetSize(src), IPL_DEPTH_8U, 1);//通道的中间变量,用于肤色检测的中间变量   
  11.     IplImage* tmpS1 = cvCreateImage(cvGetSize(src), IPL_DEPTH_8U, 1);   
  12.     IplImage* tmpH2 = cvCreateImage(cvGetSize(src), IPL_DEPTH_8U, 1);   
  13.     IplImage* tmpS3 = cvCreateImage(cvGetSize(src), IPL_DEPTH_8U, 1);   
  14.     IplImage* tmpH3 = cvCreateImage(cvGetSize(src), IPL_DEPTH_8U, 1);   
  15.     IplImage* tmpS2 = cvCreateImage(cvGetSize(src), IPL_DEPTH_8U, 1);   
  16.     IplImage* H = cvCreateImage( cvGetSize(src), IPL_DEPTH_8U, 1);   
  17.     IplImage* S = cvCreateImage( cvGetSize(src), IPL_DEPTH_8U, 1);   
  18.     IplImage* V = cvCreateImage( cvGetSize(src), IPL_DEPTH_8U, 1);     
  19.     IplImage* src_tmp1=cvCreateImage(cvGetSize(src),8,3);   
  20.        
  21.     // 高斯模糊   
  22.     cvSmooth(src,src_tmp1,CV_GAUSSIAN,3,3); //高斯模糊   
  23.        
  24.     // hue色度,saturation饱和度,value纯度   
  25.     cvCvtColor(src_tmp1, hsv, CV_BGR2HSV );//颜色转换   
  26.     cvCvtPixToPlane(hsv,H,S,V,0);//分为3个通道   
  27. /*********************肤色检测部分**************/  
  28.     cvInRangeS(H,cvScalar(0.0,0.0,0,0),cvScalar(20.0,0.0,0,0),tmpH1);   
  29.     cvInRangeS(S,cvScalar(75.0,0.0,0,0),cvScalar(200.0,0.0,0,0),tmpS1);   
  30.     cvAnd(tmpH1,tmpS1,tmpH1,0);   
  31.        
  32.     // Red Hue with Low Saturation   
  33.     // Hue 0 to 26 degree and Sat 20 to 90   
  34.     cvInRangeS(H,cvScalar(0.0,0.0,0,0),cvScalar(13.0,0.0,0,0),tmpH2);    
  35.     cvInRangeS(S,cvScalar(20.0,0.0,0,0),cvScalar(90.0,0.0,0,0),tmpS2);   
  36.     cvAnd(tmpH2,tmpS2,tmpH2,0);   
  37.   
  38.     // Red Hue to Pink with Low Saturation   
  39.     // Hue 340 to 360 degree and Sat 15 to 90   
  40.     cvInRangeS(H,cvScalar(170.0,0.0,0,0),cvScalar(180.0,0.0,0,0),tmpH3);   
  41.     cvInRangeS(S,cvScalar(15.0,0.0,0,0),cvScalar(90.,0.0,0,0),tmpS3);   
  42.     cvAnd(tmpH3,tmpS3,tmpH3,0);   
  43.   
  44.     // Combine the Hue and Sat detections   
  45.     cvOr(tmpH3,tmpH2,tmpH2,0);   
  46.     cvOr(tmpH1,tmpH2,tmpH1,0);   
  47.   
  48.     cvCopy(tmpH1,dst);   
  49.   
  50.     cvReleaseImage(&hsv);   
  51.     cvReleaseImage(&tmpH1);   
  52.     cvReleaseImage(&tmpS1);   
  53.     cvReleaseImage(&tmpH2);   
  54.     cvReleaseImage(&tmpS2);   
  55.     cvReleaseImage(&tmpH3);   
  56.     cvReleaseImage(&tmpS3);   
  57.     cvReleaseImage(&H);   
  58.     cvReleaseImage(&S);   
  59.     cvReleaseImage(&V);   
  60.     cvReleaseImage(&src_tmp1);   
  61. }   
  62.   
  63. int main(int argc, char* argv[])   
  64. {   
  65.   
  66.     IplImage *src=cvLoadImage("hand.jpg", CV_LOAD_IMAGE_COLOR);   
  67.     //    
  68.     cvNamedWindow("src", CV_WINDOW_AUTOSIZE);   
  69.     cvShowImage("src", src);   
  70.     //   
  71.   
  72.     cvNamedWindow("flip", CV_WINDOW_AUTOSIZE);   
  73.     IplImage *dsc = cvCreateImage(cvGetSize(src), src->depth, 1);   
  74.        
  75.     // 以x轴翻转   
  76.     SkinDetect(src, dsc);   
  77.     // cvFlip(src, dsc, 1);   
  78.     cvShowImage("flip", dsc);   
  79.     cvWaitKey(0);   
  80.     cvDestroyAllWindows();   
  81.     cvReleaseImage(&src);   
  82.     printf("Hello World!/n");   
  83.     return 0;   
  84. }  

 

  • 0
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值