【问题标题】:GPUImage pencil sketch filter optimisationGPUImage铅笔素描滤镜优化
【发布时间】:2017-03-06 21:01:15
【问题描述】:

我已经使用 GPUImage 框架实现了铅笔素描过滤器。但我认为过滤器过于复杂,无法产生输出。

铅笔滤镜功能

- (void)pencilSketch
{
    //UIImage *inputImage = [UIImage imageNamed:@"portrait.jpg"];
    UIImage *inputImage = [UIImage imageNamed:@"selfie4.jpg"];


    GPUImageGrayscaleFilter *grayFilter = [[GPUImageGrayscaleFilter alloc] init];
    GPUImageColorInvertFilter *edgeFilter = [[GPUImageColorInvertFilter alloc] init];
    GPUImageGaussianBlurFilter *blurr = [[GPUImageGaussianBlurFilter alloc] init];
    blurr.blurRadiusInPixels = 8.0;            // Edge Sensitivity
    blurr.texelSpacingMultiplier = 8.0;        // Edge Strength

    GPUImageLinearBurnBlendFilter *filter = [[GPUImageLinearBurnBlendFilter alloc] init];

     UIImage *invImg = [edgeFilter imageByFilteringImage: inputImage];      // Color Invert
     UIImage *blurrImg = [blurr imageByFilteringImage: inputImage];         // Gaussian Blurr

    // Linear Burn Blend
     GPUImagePicture *mainPicture = [[GPUImagePicture alloc] initWithImage: invImg];
     GPUImagePicture *topPicture = [[GPUImagePicture alloc] initWithImage: blurrImg];

     [mainPicture addTarget: filter];
     [topPicture addTarget: filter];

     [filter useNextFrameForImageCapture];
     [mainPicture processImage];
     [topPicture processImage];

     UIImage *resultedimage = [filter imageFromCurrentFramebuffer];
     resultedimage = [UIImage imageWithCGImage:[resultedimage CGImage] scale:1.0 orientation: invImg.imageOrientation];

    GPUImageColorInvertFilter *bf = [[GPUImageColorInvertFilter alloc] init];
    resultedimage = [bf imageByFilteringImage: resultedimage];      // Color Invert
    resultedimage = [grayFilter imageByFilteringImage: resultedimage];  // Gray scale

    UIImage *grainImage = [UIImage imageNamed:@"stroke2.jpg"];
    GPUImageGaussianBlurFilter *gBlurr = [[GPUImageGaussianBlurFilter alloc] init];
    gBlurr.blurRadiusInPixels = 5.0;
    UIImage *blurrGrainImg = [gBlurr imageByFilteringImage: grainImage];
    GPUImagePicture *blurrPic = [[GPUImagePicture alloc] initWithImage: resultedimage];
    GPUImagePicture *topPic = [[GPUImagePicture alloc] initWithImage: blurrGrainImg];

    GPUImageSoftLightBlendFilter *maskedFilter = [[GPUImageSoftLightBlendFilter alloc] init];
    [blurrPic addTarget: maskedFilter];
    [topPic addTarget: maskedFilter];
    [maskedFilter useNextFrameForImageCapture];
    [blurrPic processImage];
    [topPic processImage];

    resultedimage = [maskedFilter imageFromCurrentFramebuffer];
    resultedimage = [UIImage imageWithCGImage:[resultedimage CGImage] scale:1.0 orientation: inputImage.imageOrientation];

    GPUImageColorBurnFilter *bFilter = [[GPUImageColorBurnFilter alloc] init];
    bFilter.brightness = 5.0;           // Edge Darkness
    resultedimage = [bFilter imageByFilteringImage: resultedimage];

     baseImage.image = resultedimage;
}

作为过滤器结果的输出图像

请任何人建议我如何优化此过滤器? 我想如果有人指导我为此编写着色器程序。我可以制作一个自定义的 GPUImageFilter 并为其编写着色器程序。

【问题讨论】:

    标签: image-processing uiimage shader gpuimage fragment-shader


    【解决方案1】:
    UIImage *imgCropped=image;
    stillImageSource = [[GPUImagePicture alloc] initWithImage:imgCropped];
    saturationFilter=[[GPUImageSaturationFilter alloc]init];
    [saturationFilter setSaturation:0];
     [stillImageSource addTarget:saturationFilter];
    [stillImageSource processImage];
    [saturationFilter useNextFrameForImageCapture];
    UIImage *copyImage=[saturationFilter imageFromCurrentFramebuffer];
    stillImageSource=[[GPUImagePicture alloc] initWithImage:copyImage];
    copyGPUimage=[[GPUImagePicture alloc] initWithImage:copyImage];
    
    invertFilter=[[GPUImageColorInvertFilter alloc]init];
         [ copyGPUimage addTarget:invertFilter];
    [ copyGPUimage processImage];
    [invertFilter useNextFrameForImageCapture];
     UIImage *imgTempr=[invertFilter imageFromCurrentFramebuffer];
     copyGPUimage= [[GPUImagePicture alloc]initWithImage:imgTempr];
    
    
    gaussianBlur=[[GPUImageGaussianBlurFilter alloc]init];
    [gaussianBlur setBlurRadiusInPixels:val];
    [copyGPUimage addTarget:gaussianBlur];
    [ copyGPUimage processImage];
    [gaussianBlur useNextFrameForImageCapture];
    
    UIImage *imgTempa=[gaussianBlur imageFromCurrentFramebuffer];
      copyGPUimage= [[GPUImagePicture alloc]initWithImage:imgTempa];
    

    colorDodge=[[GPUImageColorDodgeBlendFilter alloc]init];

    [stillImageSource addTarget:colorDodge];
    [ copyGPUimage addTarget:colorDodge];
    [stillImageSource processImage];
    [ copyGPUimage processImage];
    [colorDodge useNextFrameForImageCapture];
    imageWithAppliedThreshold=[colorDodge imageFromCurrentFramebuffer];
    

    //这里你有你的草图现在你可以设置它的黑暗

     stillImageSource = [[GPUImagePicture alloc] initWithImage:imageWithAppliedThreshold];
    monochromeFilter=[[GPUImageMonochromeFilter alloc]init];
    [monochromeFilter setIntensity:intenVal];
    [monochromeFilter setColorRed:0.0 green:0.0 blue:0.0];
    [monochromeFilter setBackgroundColorRed:1.0 green:1.0 blue:1.0 alpha:1.0];
    [stillImageSource addTarget: monochromeFilter];
     [stillImageSource processImage];
    [monochromeFilter useNextFrameForImageCapture];
    imageWithAppliedThreshold=[monochromeFilter imageFromCurrentFramebuffer];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-27
      • 2011-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多