ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

从实时相机预览Android检测皮肤颜色

2019-11-11 17:26:34  阅读:412  来源: 互联网

标签:opencv image-processing camera color-detection android


我正在尝试构建一个应用程序,无论光照条件如何,该应用程序都可以检测皮肤不同部位(手,额头,脸颊)的肤色.我可以使用此project来做到这一点,但它不考虑光照条件.这是Iphone app之一

解决方法:

如果您想自己进行一些图像处理,我建议为图像的每个面部区域创建一个直方图.只要opencv能够检测到面部,您就应该能够对该区域中的直方图进行归一化并获取归一化版本的颜色值.

也许您想分别归一化所有通道(R,G,B)以减少彩色光的影响.

在此处阅读有关直方图的更多信息:https://en.wikipedia.org/wiki/Histogram

当您采用这种方式时,强烈建议您将一张脸作为整个区域来创建直方图.

[编辑]

现在,我知道您要尝试做什么,我认为您可以采用以下方法:

如您所见,用户需要前后轻拍相机.由于图像由手机的背面指示灯照亮,因此直方图确实正是该应用程序的创建者所创建的.但是,不是来自不同像素,而是来自使用不同照明级别的同一像素的不同样本.

当您非常靠近皮肤时,相机将为您显示近乎白色的图像,也就是您愿意的直方图计算“固定点”.

尽管我不会显示直接代码,但我将尝试解释数学模型:

>在图像中定义一个“焦点”区域.该区域是您计算直方图时要考虑的区域.边缘的所有其他区域将被忽略.
>进行一些采样(例如3秒,每秒10个采样= 30个采样)
>为每个样本创建直方图,并将它们加在一起:

>对于每个亮度值(最多256个),计算与该亮度值匹配的像素数,将所有样本相加
>找出至少具有阈值数量的最大值和最小值(如果您愿意,可以使用“工作”范围),并将其称为histLow和histHigh
>重新计算每个像素,以使像素=(pixel-histLow)/(histHigh-histLow)* 255
>将像素值限制在0-255的范围内
>取较窄范围内的像素的平均颜色值(例如,最多采样数)

如果您不知道如何在RGB中乘法或添加颜色,那应该从另一个问题开始.

标签:opencv,image-processing,camera,color-detection,android
来源: https://codeday.me/bug/20191111/2021323.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有