首页 > 高斯模糊的白边问题

高斯模糊的白边问题

以下是我写高斯模糊的代码

- (UIImage *)blureImage:(UIImage *)originImage withInputRadius:(CGFloat)inputRadius
{
    CIContext *context = [CIContext contextWithOptions:nil];
    CIImage *image = [CIImage imageWithCGImage:originImage.CGImage];
    CIFilter *filter = [CIFilter filterWithName:@"CIGaussianBlur"];
    [filter setValue:image forKey:kCIInputImageKey];
    [filter setValue:@(inputRadius) forKey: @"inputRadius"];
    CIImage *result = [filter valueForKey:kCIOutputImageKey];
    CGImageRef outImage = [context createCGImage: result fromRect:[result extent]];
    UIImage * blurImage = [UIImage imageWithCGImage:outImage];
    return blurImage;
}

如图所示,图片周围会有一圈虚化的白边,这是高斯模糊的正常效果吗,我该如何去掉这个白边?

原图在这里


前几天我也遇过这个问题,你试一下改变fromRect...
CGRect extent = CGRectInset(filter.outputImage.extent, insert, insert);
CGImageRef outImage = [context createCGImage:outputImage fromRect:extent];


高斯模糊在边界上确实有点问题。。

有个比较好的思路:将图片的第一行复制若干份放到图片上方(或者向上拉长第一行),其余边类似处理,高斯模糊之后再将图片裁剪回原大小。


高斯模糊我记得没错的话无非就是每一个pixel的RGB都是周围pixel的RGB的平均值.
所以我推测,你的原图是不是有白边?


CGImageRef outImage = [context createCGImage: result fromRect:[result extent]];

改为 CGImageRef outImage = [context createCGImage: result fromRect:[image extent]];

image 为上边的 CIImage *image = [CIImage imageWithCGImage:originImage.CGImage];


你是不是高斯模糊的同时,把图片缩小了

【热门文章】
【热门文章】