高斯模糊 毛玻璃 可以调节模糊度

2024-03-04 02:08
文章标签 模糊 高斯 调节 毛玻璃

本文主要是介绍高斯模糊 毛玻璃 可以调节模糊度,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1、框架

Accelerate.framework。

2、头文件

#import <Accelerate/Accelerate.h>


// 高斯模糊

-(UIImage*)getBlurImage:(UIImage*)image

{

    return [selfgaussBlur:0.2andImage:image];

}


- (UIImage*)gaussBlur:(CGFloat)blurLevel andImage:(UIImage*)originImage

{

    blurLevel = MIN(1.0,MAX(0.0, blurLevel));

    //int boxSize = (int)(blurLevel * 0.1 * MIN(self.size.width, self.size.height));

    int boxSize = 20;//模糊度参数配置,可以根据需要修改

    boxSize = boxSize - (boxSize % 2) + 1;

    NSData *imageData = UIImageJPEGRepresentation(originImage, 1);

    UIImage *tmpImage = [UIImageimageWithData:imageData];

    CGImageRef img = tmpImage.CGImage;

    vImage_Buffer inBuffer, outBuffer;

    vImage_Error error;

    void *pixelBuffer;

    //create vImage_Buffer with data from CGImageRef

    CGDataProviderRef inProvider = CGImageGetDataProvider(img);

    CFDataRef inBitmapData = CGDataProviderCopyData(inProvider);

    inBuffer.width = CGImageGetWidth(img);

    inBuffer.height = CGImageGetHeight(img);

    inBuffer.rowBytes = CGImageGetBytesPerRow(img);

    inBuffer.data = (void*)CFDataGetBytePtr(inBitmapData);

    //create vImage_Buffer for output

    pixelBuffer = malloc(CGImageGetBytesPerRow(img) *CGImageGetHeight(img));

    outBuffer.data = pixelBuffer;

    outBuffer.width = CGImageGetWidth(img);

    outBuffer.height = CGImageGetHeight(img);

    outBuffer.rowBytes = CGImageGetBytesPerRow(img);

    NSInteger windowR = boxSize/2;

    CGFloat sig2 = windowR / 3.0;

    if(windowR>0){ sig2 = -1/(2*sig2*sig2); }

    int16_t *kernel = (int16_t*)malloc(boxSize*sizeof(int16_t));

    int32_t  sum = 0;

    for(NSInteger i=0; i<boxSize; ++i){

        kernel[i] = 255*exp(sig2*(i-windowR)*(i-windowR));

        sum += kernel[i];

    }

    free(kernel);

    // convolution

    error = vImageConvolve_ARGB8888(&inBuffer, &outBuffer,NULL,0, 0, kernel, boxSize,1, sum, NULL,kvImageEdgeExtend);

    error = vImageConvolve_ARGB8888(&outBuffer, &inBuffer,NULL,0, 0, kernel,1, boxSize, sum, NULL,kvImageEdgeExtend);

    outBuffer = inBuffer;

    if (error) {

        //NSLog(@"error from convolution %ld", error);

    }

    CGColorSpaceRef colorSpace =CGColorSpaceCreateDeviceRGB();

    CGContextRef ctx = CGBitmapContextCreate(outBuffer.data,

                                             outBuffer.width,

                                             outBuffer.height,

                                             8,

                                             outBuffer.rowBytes,

                                             colorSpace,

                                             kCGBitmapAlphaInfoMask &kCGImageAlphaNoneSkipLast);

    CGImageRef imageRef =CGBitmapContextCreateImage(ctx);

    UIImage *returnImage = [UIImageimageWithCGImage:imageRef];

    //clean up

    CGContextRelease(ctx);

    CGColorSpaceRelease(colorSpace);

    free(pixelBuffer);

    CFRelease(inBitmapData);

    CGImageRelease(imageRef);

    return returnImage;

}


这篇关于高斯模糊 毛玻璃 可以调节模糊度的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/771687

相关文章

笔记本电脑屏幕模糊?6招恢复屏幕清晰!

在数字化时代的浪潮中,笔记本电脑已成为我们生活、学习和工作中不可或缺的一部分。然而,当那曾经清晰明亮的屏幕逐渐变得模糊不清时,无疑给我们的使用体验蒙上了一层阴影。屏幕模糊不仅影响视觉舒适度,更可能对我们的工作效率和眼睛健康构成威胁。 遇到笔记本电脑屏幕模糊的情况时我们应该如何解决?本文将与大家分享6个简单易懂的解决方法。 方法一:调整Windows分辨率 电脑屏幕模糊显示不清晰怎

yii2 模糊搜索,使索引生效

$str1 = ‘名称’; $str2 = ‘描述’; Course::find() // %这样放,可以使name索引(设置了索引的话。同时false不能删掉,否则索引失效)生效 ->where([‘LIKE’, ‘name’, $str1.’%’, false]) ->andWhere([‘status’=>1]) // %这样放,可以使desc索引(设置了索引的话。同时false不能删掉,否

GridLookUpEdit多列模糊查询最简单方式

(注明:较低版本可能不适用此方法,该方法目测所知适用于17.1或以上的版本(可能13.2后的也可以,具体大家测试一下),对于19.1后的版本,修改SearchMode属性为AutoSugget则支持多列过滤) 关于 DevExpress winfom的 GridLookUpEdit控件实现多列过滤的方法,这里介绍一个简单的方式,一个公用方法提供调用即可实现多列过滤。 介绍方法之前,普及一下知识

基于深度学习的模糊图像还原

基于深度学习的模糊图像还原 模糊图像还原(Image Deblurring)是计算机视觉中的一个重要任务,旨在从模糊的图像中恢复出清晰的图像。模糊可以由于多种原因产生,例如相机抖动、运动模糊、焦点失准等。传统的图像去模糊方法通常依赖于先验知识和复杂的数学模型,而深度学习方法则通过大规模数据训练神经网络来自动学习图像模糊与清晰之间的映射关系,从而实现更为高效和精准的模糊图像还原。 深度学习在模糊

高斯算法的原理及其与常规求和方法的区别

高斯算法的原理 高斯算法的原理源于数学家卡尔·弗里德里希·高斯在他少年时期发现的一种求和方法。当时老师让学生们计算1到100的和,高斯发现了一种快速计算的方法。 高斯注意到,如果将序列的首尾两数相加,结果总是相同的。例如: [ 1 + 100 = 101 ][ 2 + 99 = 101 ][ 3 + 98 = 101 ]... 这样,一共有50对数,每对数的和都是101。因此,1到

AI学习指南机器学习篇-高斯朴素贝叶斯算法简介

AI学习指南机器学习篇-高斯朴素贝叶斯算法简介 高斯朴素贝叶斯算法的原理 算法的基本思想 高斯朴素贝叶斯算法是贝叶斯分类器的一种,其基本思想是通过计算输入特征对于每个类别的概率,然后选择具有最高概率的类别作为最终的分类结果。其“朴素”之处在于假设特征之间相互独立,且每个特征对于分类的影响是相同的。 分类问题中的应用与多元高斯分布的关系 高斯朴素贝叶斯算法在分类问题中被广泛应用,特别是在文

redis linux 命令模糊删除key

摘要: redis-cliKEYS"pattern"|xargsredis-cliDELRediskeys命令支持模式匹配,但是del命令不支持模式匹配,有时候需要根据一定的模式来模糊删除key,这时只能结合shell命令来完成了。具体命令是:redis-cliKEYS"pattern"|xargsredis-cliDEL其中pattern是keys命令支持的模式,这样就可以模糊删除key了

java redis通过key模糊删除,批量删除,批量查询相关数据

@RunWith(SpringRunner.class)@SpringBootTestpublic class RedisTest {@Autowiredprivate StringRedisTemplate stringRedisTemplate;@Autowiredprivate RedisTemplate redisTemplate;/*** 使用redis模糊清除缓存*/@Test

redisTemplate模糊删除实现

redis 没有直接提供模糊删除的实现,我们可以根据现有的指令进行组合实现: /*** @author huoNan* @version 1.0* @package com.cyipp.skynet.dcms* @className AppTest* @description 测试类* @time 2018/8/16 16:24*/@RunWith(SpringRunner.class)@S

【MATLAB源码-第229期】基于matlab的有源功率因数校正仿真,采用PI调节改善功率因数;改善后达到99%.

操作环境: MATLAB 2022a 1、算法描述 一、整体结构概述 有源功率因数校正(APFC)是一种用于提高电力系统功率因数的技术,通过控制电流的波形,使其与电压的波形保持一致,从而减少无功功率的产生,提高系统的效率。该仿真模型采用PI调节器来实现功率因数的校正。以下将对图中各个模块和其连接进行详细描述。 二、输入电源部分 交流输入电压(Vg):这是系统的输入电源,通常为交流电源