本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
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的过程中就可以利用该算法程序(滤镜算法)去处理图片或视频。 声明:以上内容均为作者本人原创,转载需注明作者及原文链接,欢迎转载分享。
|