iphone - 如何有选择地仅替换图像中的肤色?

标签 iphone objective-c ios image-processing

我想将人类皮肤的颜色改为蓝色,就像电影《阿凡达》中那样。我使用以下代码来确定肤色像素并替换它们的颜色:

 /*
 R > 95 AND G > 40 AND B > 20 AND

    max{R, G, B} – min{R, G, B} >15 AND

    |R – G| > 15 AND

    R > G AND R > B

    OR

    R > 220 AND G > 210 AND B > 170 AND

    |R – G| <= 15 AND

    R > B AND G > B    */




    if(((red>95)&&(green>40)&&(blue>20)&&(red-green>15)&&(red>green)&&(red>blue))||((red>220)&&(green>210)&&(blue>170)&&(red-green<=15)&&(red>blue)&&(green>blue))){


        data[i]=255; 
            data[i+1]=100-(190-red); 
            data[i+2]=200-(190-green); 
            data[i+3]=255;


    }

此方法适用于我下载的人脸图像中的浅色皮肤:

enter image description here

但是当我用相机拍一张真实的照片时,它并没有给整个皮肤上色,只有部分:

enter image description here

有没有办法为一系列肤色替换肤色像素?

最佳答案

不幸的是,完美的皮肤分割是一个尚未解决(或者可能无法解决?!)的问题。如果您没有关于包含“太多”像素的要求,那么您可以打开阈值以使用蓝色色调为“更多”像素着色。但是,您随后会遇到背景像素或衣服像素也变色的问题。我们已经看到您镜头背景中的绘画被涂成蓝色,尽管它不是皮肤。到那时,我认为您唯一的选择是使用更智能的分割技术(可能是自适应技术)来更好地选择肤色像素。

关于iphone - 如何有选择地仅替换图像中的肤色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10383758/

相关文章:

ios - 核心数据 : how to organize contacts (entity) into sections based on the first letter of their names?

ios - 运行特定的XCUITests集

iphone - 在 iPhone 5 和 iPhone 4 的 xib 中处理不同尺寸的图像?

iphone - 在 iOS 设备上禁用应用外视频

iphone - 使用特定时间初始化 NSDate 对象

ios - UITableView 每个行分隔符上不需要的白线

ios - 看到过渡中间闪烁吗?

iphone - 一个 XIB 文件中的多个 View (一个窗口)

objective-c - 如何在 cocos2d 中暂停游戏?

objective-c - 在 Lion 中调用 App Expose