高斯模糊的白边问题

发布于 2022-09-01 12:33:28 字数 951 浏览 37 评论 0

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

- (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;
}

图片描述

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

_畞蕅 2022-09-08 12:33:28

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

西瓜 2022-09-08 12:33:28

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

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

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

美男兮 2022-09-08 12:33:28

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

戏剧牡丹亭 2022-09-08 12:33:28

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

若相惜即相离 2022-09-08 12:33:28

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

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文