HSV皮肤检测

// 进行肤色检测
void SkinDetect(IplImage* src, IplImage* dst)
{
// 创建图像头
IplImage* hsv = cvCreateImage(cvGetSize(src), IPL_DEPTH_8U, );//用于存图像的一个中间变量,是用来分通道用的,分成hsv通道
IplImage* tmpH1 = cvCreateImage(cvGetSize(src), IPL_DEPTH_8U, );//通道的中间变量,用于肤色检测的中间变量
IplImage* tmpS1 = cvCreateImage(cvGetSize(src), IPL_DEPTH_8U, );
IplImage* tmpH2 = cvCreateImage(cvGetSize(src), IPL_DEPTH_8U, );
IplImage* tmpS3 = cvCreateImage(cvGetSize(src), IPL_DEPTH_8U, );
IplImage* tmpH3 = cvCreateImage(cvGetSize(src), IPL_DEPTH_8U, );
IplImage* tmpS2 = cvCreateImage(cvGetSize(src), IPL_DEPTH_8U, );
IplImage* H = cvCreateImage(cvGetSize(src), IPL_DEPTH_8U, );
IplImage* S = cvCreateImage(cvGetSize(src), IPL_DEPTH_8U, );
IplImage* V = cvCreateImage(cvGetSize(src), IPL_DEPTH_8U, ); IplImage* src_tmp1 = cvCreateImage(cvGetSize(src), , ); // 高斯模糊
cvSmooth(src, src_tmp1, CV_GAUSSIAN, , ); //高斯模糊 // hue色度,saturation饱和度,value纯度
cvCvtColor(src_tmp1, hsv, CV_BGR2HSV);//颜色转换
cvSplit(hsv, H, S, V, );//分为3个通道 cvInRangeS(H, cvScalar(0.0, 0.0, , ), cvScalar(20.0, 0.0, , ), tmpH1);
cvInRangeS(S, cvScalar(75.0, 0.0, , ), cvScalar(200.0, 0.0, , ), tmpS1);
cvAnd(tmpH1, tmpS1, tmpH1, ); // Red Hue with Low Saturation
// Hue 0 to 26 degree and Sat 20 to 90
cvInRangeS(H, cvScalar(0.0, 0.0, , ), cvScalar(13.0, 0.0, , ), tmpH2);
cvInRangeS(S, cvScalar(20.0, 0.0, , ), cvScalar(90.0, 0.0, , ), tmpS2);
cvAnd(tmpH2, tmpS2, tmpH2, ); // Red Hue to Pink with Low Saturation
// Hue 340 to 360 degree and Sat 15 to 90
cvInRangeS(H, cvScalar(170.0, 0.0, , ), cvScalar(180.0, 0.0, , ), tmpH3);
cvInRangeS(S, cvScalar(15.0, 0.0, , ), cvScalar(., 0.0, , ), tmpS3);
cvAnd(tmpH3, tmpS3, tmpH3, ); // Combine the Hue and Sat detections
cvOr(tmpH3, tmpH2, tmpH2, );
cvOr(tmpH1, tmpH2, tmpH1, ); 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("C:\\C_C++ code\\Photo and video\\text009.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"); */
VideoCapture video();
IplImage *src, *dst;
Mat img,bigimg;
double scalar = ;
video >> img;
src = &(IplImage(img));
dst = cvCreateImage(cvGetSize(src), , );
while ()
{
video >> img;
src = &(IplImage(img));
SkinDetect(src, dst);
img = cvarrToMat(dst);
//腐蚀与膨胀 erode(img, img, Mat());
erode(img, img, Mat());
//erode(img, img, Mat()); dilate(img, img, Mat());
dilate(img, img, Mat());
dilate(img, img, Mat()); dilate(img, img, Mat());
dilate(img, img, Mat());
resize(img, bigimg, Size(img.cols*scalar, img.rows*scalar), , , );
imshow("x", bigimg);
if (waitKey() > )
break;
}
waitKey();
return ;
}

OpenCv皮肤检测-HSV分离的更多相关文章

  1. OpenCV探索之路(二十七):皮肤检测技术

    好久没写博客了,因为最近都忙着赶项目和打比赛==| 好吧,今天我打算写一篇关于使用opencv做皮肤检测的技术总结.那首先列一些现在主流的皮肤检测的方法都有哪些: RGB color space Yc ...

  2. OpenCV颜色转换和皮肤检测

    本笔记重点记录OpenCV中的颜色转换和利用色彩空间的特性进行皮肤检测 颜色转换 实现原理 之所以要引入色调/饱和度/亮度的色彩空间概念,是因为人们喜欢凭直觉分辨各种颜色,而它与这种方式吻合.实际上, ...

  3. OpenCV——肤色检测

    一.RGB color space 检测代码如下: void SkinRGB(IplImage* src,IplImage* dst) { //RGB颜色空间 //均匀照明:R>95,G> ...

  4. keras系列︱人脸表情分类与识别:opencv人脸检测+Keras情绪分类(四)

    引自:http://blog.csdn.net/sinat_26917383/article/details/72885715 人脸识别热门,表情识别更加.但是表情识别很难,因为人脸的微表情很多,本节 ...

  5. opencv直线检测在c#、Android和ios下的实现方法

    opencv直线检测在c#.Android和ios下的实现方法 本文为作者原创,未经允许,不得转载 :原文由作者发表在博客园:http://www.cnblogs.com/panxiaochun/p/ ...

  6. OPENCV条形码检测与识别

    条形码是当前超市和部分工厂使用比较普遍的物品,产品标识技术,使用摄像头检测一张图片的条形码包含有两个步骤,第一是定位条形码的位置,定位之后剪切出条形码,并且识别出条形码对应的字符串,然后就可以调用网络 ...

  7. OpenCV矩形检测

    OpenCV矩形检测 需求:提取图像中的矩形,图像存在污染现象,即矩形区域不是完全规则的矩形. 思路一:轮廓法 OpenCV里提取目标轮廓的函数是findContours,它的输入图像是一幅二值图像, ...

  8. OpenCV绘制检测结果

    OpenCV绘制检测结果 opencv  rtcp  timestamp  一.介绍 由于在验证阶段,使用FPGA时我们的算法检测速度很慢,没法直接在主流上进行绘图,否则的话,主流就要等待算法很久才能 ...

  9. Opencv SkinOtsu皮肤检测

    void SkinRGB(IplImage* rgb, IplImage* _dst) { assert(rgb->nChannels == && _dst->nChann ...

随机推荐

  1. CentOS7搭建hadoop2.6.4双节点集群

    环境: CentOS7+SunJDK1.8@VMware12. NameNode虚拟机节点主机名:master,IP规划:192.168.23.101,职责:Name node,Secondary n ...

  2. Java反射机制<1>

    如果要通过一个对象找到一个类的名称,此时就需要用到反射机制(反射技术是用来做框架的,一般情况下Java私有对象不能被访问,但是暴力反射可以访问私有对象). 任何一个类如果没有明确地声明继承自哪个父类的 ...

  3. 创建守护进程步骤与setsid() -- linux deamon进程

    原创:http://www.cnblogs.com/mickole/p/3188321.html 一,守护进程概述 Linux Daemon(守护进程)是运行在后台的一种特殊进程.它独立于控制终端并且 ...

  4. 通过Spring @PostConstruct 和 @PreDestroy 方法 实现初始化和销毁bean之前进

    关于在spring  容器初始化 bean 和销毁前所做的操作定义方式有三种: 第一种:通过@PostConstruct 和 @PreDestroy 方法 实现初始化和销毁bean之前进行的操作 第二 ...

  5. Bitcask 存储模型

    Bitcask 存储模型 Bitcask 是一个日志型.基于hash表结构的key-value存储模型,以Bitcask为存储模型的K-V系统有 Riak和 beansdb新版本. 日志型数据存储 何 ...

  6. OC-点语法

    点语法的本质:方法调用 #import <Foundation/Foundation.h> #import "Person.h" int main(int argc, ...

  7. Orchard源码分析(4.3):Orchard.Events.EventsModule类(Event Bus)

    概述 采用Event Bus模式(事件总线),可以使观察者模式中的观察者和被观察者实现解耦. 在.Net 中使用观察者模式,可以使用事件(委托)和接口(类).Orchard Event  Bus使用的 ...

  8. MongoDB学习笔记(索引)(转)

    一.索引基础:    MongoDB的索引几乎与传统的关系型数据库一模一样,这其中也包括一些基本的优化技巧.下面是创建索引的命令:    > db.test.ensureIndex({" ...

  9. Hello World(本博客启程篇)

    Hello World 作为本博客第一篇日志,作为程序员,无论走到哪里,做什么事,必须先输出这句话. 一个想法 从今天3月份到现在一直在学技术,过程中坑的解决.知识的总结以及想法等都写到了" ...

  10. TCSQL实时列表缓存数据库帮助文档

    [文章作者:张宴 本文版本:v1.1 最后修改:2010.09.03 转载请注明原文链接:http://blog.zyan.cc/tcsql/] 曾经有人提出,一般数据库缓存分为四种.第一种:单个对象 ...