opencv基于HSV的肤色分割
//函数功能:在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的肤色分割的更多相关文章
- Android上掌纹识别第一步:基于OpenCV的6种肤色分割 源码和效果图
Android上掌纹识别第一步:基于OpenCV的6种肤色分割 源码和效果图 分类: OpenCV图像处理2013-02-21 21:35 6459人阅读 评论(8) 收藏 举报 原文链接 ht ...
- VIPS:基于视觉的页面分割算法[微软下一代搜索引擎核心分页算法]
VIPS:基于视觉的页面分割算法[微软下一代搜索引擎核心分页算法] - tingya的专栏 - 博客频道 - CSDN.NET VIPS:基于视觉的页面分割算法[微软下一代搜索引擎核心分页算法] 分类 ...
- [UWP]分享一个基于HSV色轮的调色板应用
1. 前言 上一篇文章介绍了HSV色轮,这次分享一个基于HSV色轮的调色板应用,应用地址:ColorfulBox - Microsoft Store 2. 功能 ColorfulBox是Adobe 色 ...
- 基于FPGA的肤色识别算法实现
大家好,给大家介绍一下,这是基于FPGA的肤色识别算法实现. 我们今天这篇文章有两个内容一是实现基于FPGA的彩色图片转灰度实现,然后在这个基础上实现基于FPGA的肤色检测算法实现. 将彩色图像转化为 ...
- segMatch:基于3D点云分割的回环检测
该论文的地址是:https://arxiv.org/pdf/1609.07720.pdf segmatch是一个提供车辆的回环检测的技术,使用提取和匹配分割的三维激光点云技术.分割的例子可以在下面的图 ...
- opencv基于PCA降维算法的人脸识别
opencv基于PCA降维算法的人脸识别(att_faces) 一.数据提取与处理 # 导入所需模块 import matplotlib.pyplot as plt import numpy as n ...
- 基于HSV彩色空间与直方图信息的植物叶脉FFCM算法提取
宣旭峰,王美丽,张建锋. 基于HSV彩色空间与直方图信息的植物叶脉FFCM算法提取[J/OL]. 计算机应用研究,2018,(08):1-7. (2017-07-21)[2017-10-09]. ht ...
- OpenCV 基于超像素分割的图像区域选取方法及源码
本系列文章由 @yhl_leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/51386993 工程源码GitHub: ...
- 基于标记的分水岭分割算法/OpenCV中距离变换
Opencv分水岭算法——watershed自动图像分割用法 OpenCV距离变换distanceTransform应用 图像分割作为图像识别的基础,在图像处理中占有重要地位,通常需要在进行图像分割算 ...
随机推荐
- OData services入门----使用ASP.NET Web API描述
http://www.cnblogs.com/muyoushui/archive/2013/01/27/2878844.html ODate 是一种应用层协议,设计它的目的在于提供一组通过HTTP的交 ...
- JS如何调用隐藏按钮的click事件
js如何调用隐藏按钮的click事件:1.设定隐藏不要使用Visiable属性,使用style.display=none:2.触发JS事件可以使用fireEvent方法,如:document.getE ...
- UI-程序的运行顺序
在AppDelegate.m里面的每个方法里都输入(包括main文件里也输入) NSLog(@"%s %d”,__func__,__LINE__); __func__ :代表使用的方法 __ ...
- SPOJ #2 Prime Generator
My first idea was Sieve of Eratosthenes, too. But obviously my coding was not optimal and it exceede ...
- Java-Thread
1. 线程的创建和启动 1.1 继承Thread 在run方法里,通过this获取当前线程. 多个线程不能共享实例变量. 1.2 通过实现接口 1.2.1 实现Runable接口 在run方法里,只能 ...
- SVN Server配置详解 及备份
SVN简介和工作原理 subversion(简称svn)是近几年崛起的版本管理软件,是cvs的接班人,目前绝大多数开源软件都使用svn作为代码版本管理软件.Subversion支持linux和wind ...
- final specifier (since C++11)
Specifies that a virtual function cannot be overridden in a derived class or that a class cannot be ...
- 黄聪:MYSQL提交一批ID,查询数据库中不存在的ID并返回
假设你数据库有个A表: ID NAME 1 aaa 2 bbb 3 ccc 4 ddd 需求:给你几个ID,返回A表中不存在的ID? 例如提交1,2,8,9 返回8,9 sel ...
- iphone Dev 开发实例10:How To Add a Slide-out Sidebar Menu in Your Apps
Creating the Xcode Project With a basic idea about what we’ll build, let’s move on. You can create t ...
- Navicat(连接)-1
连接 要在 Navicat 开始使用你的服务器,你要首先用连接窗口创建一个或多个连接.如果你是一个服务器新手和不肯定如何工作,你可能想看看: MySQL 用户手册 Oracle 数据库文件 Postg ...