使用Obj C中的Brad Larson GPUImage为照片创建草图效果 [英] Create Sketch effect to photos using Brad Larson GPUImage in Obj C

查看:95
本文介绍了使用Obj C中的Brad Larson GPUImage为照片创建草图效果的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

您好我想在 iOS 中使用Brad Larson的 GPUImage sdk对照片进行素描效果。我正在尝试创建这样的草图效果

Hi I would like to try sketch effect on photos using Brad Larson's GPUImage sdk in iOS. I am trying to create sketch effect like this

但我得到的草图效果是这样的

But the sketch effect i get is like this

我正在使用GPUImageSketchFilter创建此效果,以下是我提供的参数来实现这个效果:

I am using GPUImageSketchFilter to create this effect, Following are the parameters I provide to achieve this effect:

setTexelHeight:(1.12 / 480.0)
setTexelWidth:(0.5 / 320.0) 

请建议我如何达到这个效果..

Please suggest me how to achieve this effect..

Brad根据你的建议,我有这个......

Brad going by your suggestions, i have got this...

我的目标:我需要使正确的图像看起来像左图像。 。
请建议我.. !!

My Objective: I need to make the right image look like the left one.. Pls suggest me..!!

推荐答案

我看到了更好的素描效果ect代码,但我不擅长过滤器,我不能为GPUImage写一个自定义过滤器来应用这个:

I have seen a better sketch effect code,but I am not good at filter ,I can not write a custom filter for GPUImage to apply this:

float res = iResolution.x;
float n0 = 97.0 / res;
float n1 = 15.0 / res;
float n2 = 97.0 / res;
float n3 = 9.7 / res;
float total = n2 + ( 4.0 * n0 ) + ( 4.0 * n1 );

const vec3 div3 = vec3(1.0 / 3.0);

void main(void) {
  float offset, temp1, temp2;
    vec4 m, p0, p1, p2, p3, p4, p5, p6, p7, p8;
    offset = n3;

    p0=texture2D(iCamera,iScreen);
    p1=texture2D(iCamera,iScreen+vec2(-offset,-offset));
    p2=texture2D(iCamera,iScreen+vec2( offset,-offset));
    p3=texture2D(iCamera,iScreen+vec2( offset, offset));
    p4=texture2D(iCamera,iScreen+vec2(-offset, offset));

    offset=n3*2.0;

    p5=texture2D(iCamera,iScreen+vec2(-offset,-offset));
    p6=texture2D(iCamera,iScreen+vec2( offset,-offset));
    p7=texture2D(iCamera,iScreen+vec2( offset, offset));
    p8=texture2D(iCamera,iScreen+vec2(-offset, offset));
    m = (p0 * n2 + (p1 + p2 + p3 + p4) * n0 + (p5 + p6 + p7 + p8) * n1) / total;

    //convert to b/w
    temp1 = dot(p0.rgb, div3);
    temp2 = dot(m.rgb, div3);

    //color dodge blend mode
    if (temp2 <= 0.0005) {
        gl_FragColor = vec4( 1.0, 1.0, 1.0, p0.a);
    } else {
        gl_FragColor = vec4( vec3(min(temp1 / temp2, 1.0)), p0.a);
    }
}

这篇关于使用Obj C中的Brad Larson GPUImage为照片创建草图效果的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆