肤色检测一例-使用rgb颜色模型

代码:

/*
输入:rgb图像
输出:与输入图像尺寸相同的灰度图,若rgb图中某像素检测为肤色,则灰度图中对应像素为255,否则为0
*/
void SkinRGB( Mat &rgb,Mat &dst){
    assert(rgb.channels() == 3 );
    const int R = 2;
    const int G = 1;
    const int B = 0;

    dst = Mat::zeros(rgb.rows, rgb.cols, CV_8U);
    for (int i = 0; i < rgb.rows; i++){
        Vec3b* ptr = rgb.ptr<Vec3b>(i);
        uchar* ptr_mask = dst.ptr<uchar>(i);
        for (int j = 0; j < rgb.cols; j++){
            Vec3b pixel = ptr[j];
            if ((pixel[R] > 95 && pixel[G]>40 && pixel[B] > 20 &&
                pixel[R] - pixel[B]>15 && pixel[R] - pixel[G]>15) ||
                (pixel[R]>200 && pixel[G]>210 && pixel[B]>170 &&
                abs(pixel[R] - pixel[B]) <= 15 && pixel[R]>pixel[B] && pixel[G]>pixel[B])){
                ptr_mask[j] = 255;
            }
        }
    }

}

效果:

时间: 2024-10-11 13:23:21

肤色检测一例-使用rgb颜色模型的相关文章

基于RGB颜色模型的图像提取与二值化

现实中我们要处理的往往是RGB彩色图像.对其主要通过HSI转换.分量色差等技术来提出目标. RGB分量灰度化: RGB可以分为R.G.B三分量.当R=G=B即为灰度图像,很多时候为了方便,会直接利用某个分量来进行灰度化,如下图所示: 上图中R分量下红色部分明显比其他两幅更偏白:同样地G分量草地较淡,B分量天空较淡.其他部分如灰黑色马路则相差不多.实际中,我们可以根据 需求有选择地选择分量. RGB分量差灰度化: 有时候我们的要求是从图像中提取某种颜色区域,那么最简单的方法就是采用RGB色差. 例

图像处理复习3———图像编码和颜色模型

图像处理复习 CH6 图像编码 6.1 编码与冗余 图像编码,就是对图像源数据按一定的规则进行变换和组合,从而达到以尽可能少的代码来表示尽可能多的数据的目的 编码实现了压缩,所以又称之为压缩编码 图像能够压缩是因为为压缩图像中存在信息的冗余,一般将冗余分成三类: 编码冗余:自然编码将所有灰度值等长编码,出现频率高的灰度值全局相对码字长度较大 像素相关性冗余:帧内像素信息冗余.帧间像素信息冗余 视觉冗余:人眼对不同视觉信息有不同敏感度,并且人眼分辨率有限 6.2 信息熵和编码性能参数 (1)熵 设

自己做的一个肤色检测模型

肤色检测 在人像美化中,肤色检测有助于防止磨掉头发.胡子等需要保持细节的部分,也可以使美白算法仅作用于皮肤,不对人像周边环境产生影响. 网上找了一下肤色检测模型,效果都太差,换了一种思维,找个训练集,自己做一个. 训练结果,正确率大概85%,运行起来,确实还是比网上找的公式好,勉强可用了. 模型 算法最终反映为 opengl 的一个片断着色器,直接看shader代码吧. varying vec2 textureCoordinate; uniform sampler2D inputImageTex

RGB颜色与16进制颜色的换算方法

网页中表示颜色的常见方法有: 1.Color Name(颜色名称) 用颜色名称来指定颜色,这种方法简洁直观,一看就知道是什么颜色,但最大的缺点是颜色的名称太少,不能有效的表示一些较丰富的颜色 2.RGB(RGB记法) 3.HEX(十六进制记法) RGB记法和十六进制记法都能很好的表示出一些较为丰富的颜色,但是我们用到16进制的比较多,语法为#RRGGBB,下面说下我刚研究出来的转换方法: 我们都知道 RGB记法rgb(255,255,255)=十六进制记法#FFFFFF,都表示白色 RGB记法r

Atitit 图像处理--图像分类 模式识别 肤色检测识别原理&#160;与attilax的实践总结

Atitit 图像处理--图像分类 模式识别 肤色检测识别原理 与attilax的实践总结 1.1. 五中滤镜的分别效果..1 1.2. 基于肤色的图片分类1 1.3. 性能提升2 1.4. --code2 1.1. 五中滤镜的分别效果.. /AtiPlatf_cms/src/com/attilax/clr/skinfltAll.java 1.2. 基于肤色的图片分类 /AtiPlatf_cms/src/com/attilax/clr/moveBySkinLow.java 生成所有图片的肤色百分

SSE图像算法优化系列十:简单的一个肤色检测算法的SSE优化。

在很多场合需要高效率的肤色检测代码,本人常用的一个C++版本的代码如下所示: void IM_GetRoughSkinRegion(unsigned char *Src, unsigned char *Skin, int Width, int Height, int Stride) { for (int Y = 0; Y < Height; Y++) { unsigned char *LinePS = Src + Y * Stride; // 源图的第Y行像素的首地址 unsigned char

CMYK颜色模型

CMYK也成为印刷颜色模型,即用来制作印刷品的. 从理论上讲,只需要CMY这三种油墨即可,但是CMY三个油墨混合的实际结果是一种"灰"黑色. 且黑色油墨相对又便宜,故黑色油墨被用于代替等量的青色.品红.黄色油墨.这就是为什么四色套印工艺采用CMYK模型的理由了. CMYK的所有颜色都包含有RGB中,但CMYK的颜色数量少于RGB.即用RGB模型区制作印刷用的图像时,某些色彩也行就无法印刷. 即在计算机上显示,一般采用RGB模式. 如果图像需要打印或者印刷,就需要适应CMYK模式,进行&

几种颜色模型的转换公式

在做图像处理时,我们一般采用的是RGB空间,但是在某些特殊情况下,我们也会用到其他的颜色空间.本文主要介绍一些常见的颜色空间的概念和转换公式. 颜色的实质是一种光波.它的存在是因为有三个实体:光线.被观察的对象以及观察者.人眼是把颜色当作由被观察对象吸收或者反射不同波长的光波形成的.例如,当在一个晴朗的日子里,我们看到阳光下的某物体呈现红色时,那是因为该物体吸收了其它波长的光,而把红色波长的光反射到我们人眼里的缘故.当然,我们人眼所能感受到的只是波长在可见光范围内的光波信号.当各种不同波长的光信

RGB颜色函数-RGB()颜色函数

在 Sass 的官方文档中,列出了 Sass 的颜色函数清单,从大的方面主要分为 RGB , HSL 和 Opacity 三大函数,当然其还包括一些其他的颜色函数,比如说 adjust-color 和 change-color 等.在这章节中,将主要和大家一起探讨 Sass 颜色函数中常见的 RGB.HSL 和 Opacity 函数. 1.RGB颜色函数 RGB 颜色只是颜色中的一种表达式,其中 R 是 red 表示红色,G 是 green 表示绿色而 B 是 blue 表示蓝色.在 Sass