魔扣论坛

魔扣源码论坛业务
查看: 23|回复: 1

美狐滤镜sdk技术(二):浅析基础颜色滤镜算法

[复制链接]
  • TA的每日心情
    慵懒
    3 天前
  • 签到天数: 33 天

    [LV.5]经常留意

    33

    主题

    37

    帖子

    188

    积分

    初级魔扣

    Rank: 2

    魔扣币
    340
    贡献
    137
    威望
    0
    发表于 2019-9-5 16:45:22 | 显示全部楼层 |阅读模式
    魔扣币兑换比例:【 50以下 : ¥1 = 10 魔扣币 】丨【 50 - 100 :¥1 = 20 魔扣币】丨【 100以上:¥1 = 30 魔扣币 】
    淘宝、天猫优惠券

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?立即注册

    x
    无论是日常拍照记录生活还是直播短视频应用场景下的视频拍摄,都离不开添加滤镜的步骤,虽然现阶段来看原质相机像素各方面性能都有质的提升,但是为了满足用户对照片或视频质感效果的需求,在APP中接入滤镜sdk成为了当下最流行的方式。而滤镜sdk技术也因此在业内逐渐受欢迎,本文以基础的颜色滤镜算法为主简单分享下相关内容。
    什么是颜色滤镜
    美狐滤镜sdk中所包含的颜色滤镜,其实也可以认为是调色滤镜,是最基础也是最常见的滤镜。即任何通过调节图像像素值的亮度、饱和度、对比度、色相等方法,所得到的不同于原图像颜色的效果,都可以看作是颜色滤镜。
    颜色滤镜的实现原理
    1.PS饱和度调节算法的实现原理
    假设所使用图片原图像素为P,RGB颜色空间所对应的颜色分量为R/G/B,饱和度调整参数为saturation,范围是[-100,100],则可参考代码如下所示:
    float k = saturation/100
    rgbMin = min( K. G, B)
    rgbMax = max( R, G, B)
    delta = (rgbMax —rgbMin) /255 .0
    f(delta = O)return RGB
    vlaue = (rgbMax±rgbMin)/ 255
    L = value /2
    S = L < 0.5 ?(deltaIvalue) : delta 1(2 — value)
    if (k>= 0)
    {
    alpha=k±S>=1?S: 1—k
    alhpa = 1/alpha—1
    }
    else
    {
    alpha=k
    }
    RGB=RGB+(RGBL*255)*alpha
    2.C语言实现
    可供参考代码如下所示:
    intf_Stauration(unsigned char* srcData, int width, int height, int stride, intsaturation)
    {
          unsigned char* pSrc = srcData;
          int r, g, b, rgbMin, rgbMax;
          int k = saturation / 100.0f * 128;
          int alpha = 0;
          for(int j = 0; j < height; j++)
          {
               for(int i = 0; i < width; i++)
               {
                     r = pSrc[2];
                     g = pSrc[1];
                     b = pSrc[0];
                     rgbMin = MIN2(MIN2(r, g), b);
                     rgbMax = MAX2(MAX2(r, g), b);
                     int delta = (rgbMax - rgbMin);
                     int value = (rgbMax + rgbMin);
                     if(delta ==0)
                     {
                          pSrc += 4;
                          continue;
                     }               
                     int L = value >> 1;
                     int S = L < 128 ? (delta << 7) / value delta << 7) / (510 - value);
                     if(k >= 0)
                     {
                          alpha = k + S >= 128 ? S : 128 - k;
                          alpha = 128 * 128 / alpha - 128;
                     }
                     else
                          alpha = k;
                     r = r + ((r - L) * alpha >> 7);
                     g = g + ((g - L) * alpha >> 7);
                     b = b + ((b - L) * alpha >> 7);
                     pSrc[0] = CLIP3(b, 0, 255);
                     pSrc[1] = CLIP3(g, 0, 255);
                     pSrc[2] = CLIP3(r, 0, 255);
                     pSrc += 4;
               }
          }
          return 0;
    }
    3.颜色增强滤镜
    可供参考代码如下所示:
    intf_ColorFilter(unsigned char* srcData, int width, int height, int stride)
    {
          return f_Saturation(srcData, width, height, stride, 41);
    }
    以上就是美狐滤镜sdk中关于制作颜色滤镜的大概流程,以PS模拟的滤镜效果并结合参考代码,这样一来在开发滤镜sdk的过程中就可以利用该算法程序(滤镜算法)去处理图片或视频。
    声明:以上内容均为作者本人原创,转载需注明作者及原文链接,欢迎转载分享。

    该用户从未签到

    0

    主题

    196

    帖子

    394

    积分

    中级魔扣

    Rank: 3Rank: 3

    魔扣币
    198
    贡献
    198
    威望
    0
    发表于 2019-9-5 16:45:51 | 显示全部楼层
    花的清香溢满季节的转换,云的多姿展示夏天的走远,月的明朗邀来金秋的缠绵,心的问候播撒友情的思念,心愿的美好祈祷快乐永远,亲爱的朋友,魔扣源码论坛祝你天天快乐!
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    • 联系我们
    • 新浪微博 :
    • 在线客服 :魔扣科技 
    • 源码QQ群 :魔扣源码论坛官方总群
    • 联系邮箱 :charlin#morko.net
    • 微信扫一扫
    快速回复 返回顶部 返回列表