//函数功能:在HSV颜色空间对图像进行肤色模型分割 //输入:src-待处理的图像,imgout-输出图像 //返回值:返回一个iplimgae指针,指向处理后的结果 IplImage* SkinSegmentHSV(IplImage* src,IplImage* imgout)

{

//定义一些中间指针,指向处理过程中的中间变量

IplImage* HSV = NULL;

IplImage* HImg= NULL;

IplImage* SImg= NULL;

IplImage* VImg= NULL;

//指向处理后的结果

IplImage* result = NULL;

if (!src||!imgout)  {   return NULL;  }

//获取输入图像的大小

CvSize SrcSize = cvGetSize(src);

//为中间结果指针分配存储空间

HSV = cvCreateImage(SrcSize,8,3);

HImg= cvCreateImage(SrcSize,8,1);

SImg= cvCreateImage(SrcSize,8,1);

VImg= cvCreateImage(SrcSize,8,1);

result= cvCreateImage(cvGetSize(imgout),8,1);

//将图像从RGB颜色空间转换到HSV空间

cvCvtColor(src,HSV,CV_BGR2HSV);

//将HSV分解为三张单通道图像,便于后面就行处理

cvSplit(HSV,HImg,SImg,VImg,NULL);

int i,j;  int value = 0;

//对通道H进行处理

for (i = 0; i < HImg->height; i++)

{

for (j = 0; j < HImg->width; j++)

{

value = cvGetReal2D(HImg,i,j);

if (value >=0 && value <= 25)

{     *(HImg->imageData+i*HImg->widthStep+j) = 255;    }

else    {     *(HImg->imageData+i*HImg->widthStep+j) = 0;    }

}

}

//对通道S进行处理

for (i = 0; i < SImg->height; i++)  {   for (j = 0; j < SImg->width; j++)

{    value = cvGetReal2D(SImg,i,j);

if (value >=26 && value <= 200)

{     *(SImg->imageData+i*SImg->widthStep+j) = 255;    }

else    {     *(SImg->imageData+i*SImg->widthStep+j) = 0;    }

}

}

//对通道V进行处理

for (i = 0; i < VImg->height; i++)  {

for (j = 0; j < VImg->width; j++)   {

value = cvGetReal2D(VImg,i,j);

if (value >=20 && value <= 200)     {     *(VImg->imageData+i*VImg->widthStep+j) = 255;     }

else     {      *(VImg->imageData+i*VImg->widthStep+j) = 0;     }    }   }

cvAnd(HImg,SImg,result,0);

cvAnd(VImg,result,result,0);

//对所得到的结果进行形态学腐蚀处理,去除小区域部分

cvErode(result,result);  cvErode(result,result);  cvErode(result,result);  cvDilate(result,result);

//将处理后的结果赋值给输出图像

cvCopy(result,imgout);

//释放相关资源

cvReleaseImage(&src);  cvReleaseImage(&HSV);  cvReleaseImage(&HImg);  cvReleaseImage(&SImg);  cvReleaseImage(&VImg);  cvReleaseImage(&result);

//返回处理后的结果

return imgout;

}

opencv基于HSV的肤色分割的更多相关文章

  1. Android上掌纹识别第一步:基于OpenCV的6种肤色分割 源码和效果图

    Android上掌纹识别第一步:基于OpenCV的6种肤色分割 源码和效果图 分类: OpenCV图像处理2013-02-21 21:35 6459人阅读 评论(8) 收藏 举报   原文链接  ht ...

  2. VIPS:基于视觉的页面分割算法[微软下一代搜索引擎核心分页算法]

    VIPS:基于视觉的页面分割算法[微软下一代搜索引擎核心分页算法] - tingya的专栏 - 博客频道 - CSDN.NET VIPS:基于视觉的页面分割算法[微软下一代搜索引擎核心分页算法] 分类 ...

  3. [UWP]分享一个基于HSV色轮的调色板应用

    1. 前言 上一篇文章介绍了HSV色轮,这次分享一个基于HSV色轮的调色板应用,应用地址:ColorfulBox - Microsoft Store 2. 功能 ColorfulBox是Adobe 色 ...

  4. 基于FPGA的肤色识别算法实现

    大家好,给大家介绍一下,这是基于FPGA的肤色识别算法实现. 我们今天这篇文章有两个内容一是实现基于FPGA的彩色图片转灰度实现,然后在这个基础上实现基于FPGA的肤色检测算法实现. 将彩色图像转化为 ...

  5. segMatch:基于3D点云分割的回环检测

    该论文的地址是:https://arxiv.org/pdf/1609.07720.pdf segmatch是一个提供车辆的回环检测的技术,使用提取和匹配分割的三维激光点云技术.分割的例子可以在下面的图 ...

  6. opencv基于PCA降维算法的人脸识别

    opencv基于PCA降维算法的人脸识别(att_faces) 一.数据提取与处理 # 导入所需模块 import matplotlib.pyplot as plt import numpy as n ...

  7. 基于HSV彩色空间与直方图信息的植物叶脉FFCM算法提取

    宣旭峰,王美丽,张建锋. 基于HSV彩色空间与直方图信息的植物叶脉FFCM算法提取[J/OL]. 计算机应用研究,2018,(08):1-7. (2017-07-21)[2017-10-09]. ht ...

  8. OpenCV 基于超像素分割的图像区域选取方法及源码

    本系列文章由 @yhl_leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/51386993 工程源码GitHub: ...

  9. 基于标记的分水岭分割算法/OpenCV中距离变换

    Opencv分水岭算法——watershed自动图像分割用法 OpenCV距离变换distanceTransform应用 图像分割作为图像识别的基础,在图像处理中占有重要地位,通常需要在进行图像分割算 ...

随机推荐

  1. Ext JS treegrid 发生的在tree上增加itemclick 与在其它列上增加actioncolumn 发生事件冲突(event conflict)的解决办法

    Ext JS treegrid 发生的在tree上增加itemclick 与在其它列上增加actioncolumn 发生事件冲突(event conflict)的解决办法 最近在适用Ext JS4开发 ...

  2. css布局实践心得总结

    一.摘要: 今天在写一个页面,对css中的BFC(块级格式化范围)有了一点体会,今天把遇到的问题和解决方案总结下来,额外还总结一下强大的负外边距的使用心得. 二.总结:

  3. java.io.FileNotFoundException:SESSIONS.ser (系统找不到指定的路径。)

    问题如下: java.io.FileNotFoundException: E:\apache-tomcat-8.0.37\work\Catalina\localhost\20161013Shoppin ...

  4. Android界面布局基本知识简述

    Android手机操作系统在模拟器中进行相关的编写,可以帮助我们实现各种功能需求.尤其是在界面的操作方面显得更为突出.在这里我们就可以对Android界面布局的相关操作来对这方面的知识进行一个深入的了 ...

  5. TMS320C54x系列DSP的CPU与外设——第3章 存储器

    第3章  存储器 本章介绍了TMS320C54x DSP存储器的构成和操作.一般来说,C54x器件共有192K 16位字的存储窨,这个空间分成3个专用的部分:64K字程序.64K字数据和64K字I/O ...

  6. php获取从百度搜索进入网站的关键词

    <?php function search_word_from() { $referer = isset($_SERVER['HTTP_REFERER'])?$_SERVER['HTTP_REF ...

  7. DISPOSE_ON_CLOSE 和 EXIT_ON_CLOSE 的区别

    If you have several JFrames open and you close one that has EXIT_ON_CLOSE it will close all the JFra ...

  8. python3读取文件

    #coding:utf-8 rfile = open('test.txt','r') str=[] for x in rfile: str = x.split(',') for x in str: p ...

  9. 22个值得收藏的Android开源代码-UI篇

    本文介绍了android开发者中比较热门的开源代码,这些代码绝大多数可以直接应用到项目中. FileBrowserView 一个强大的文件选择控件.界面比较漂亮,使用也很简单.特点:可以自定义UI:支 ...

  10. spark基础练习(未完)

    1.filterval rdd = sc.parallelize(List(1,2,3,4,5))val mappedRDD = rdd.map(2*_)mappedRDD.collectval fi ...