码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • IOS OpenGL ES GPUImage 图像显示亮度最高的像素,其他为黑 GPUImageNonMaximumSuppressionFilte


    目录

    • 一.简介
    • 二.效果演示
    • 三.源码下载
    • 四.猜你喜欢

    零基础 OpenGL (ES) 学习路线推荐 : OpenGL (ES) 学习目录 >> OpenGL ES 基础

    零基础 OpenGL (ES) 学习路线推荐 : OpenGL (ES) 学习目录 >> OpenGL ES 转场

    零基础 OpenGL (ES) 学习路线推荐 : OpenGL (ES) 学习目录 >> OpenGL ES 特效

    零基础 OpenGL (ES) 学习路线推荐 : OpenGL (ES) 学习目录 >> OpenGL ES 函数

    零基础 OpenGL (ES) 学习路线推荐 : OpenGL (ES) 学习目录 >> OpenGL ES GPUImage 使用

    零基础 OpenGL (ES) 学习路线推荐 : OpenGL (ES) 学习目录 >> OpenGL ES GLSL 编程

    一.简介

    GPUImage 共 125 个滤镜, 分为四类

    1、Color adjustments : 31 filters , 颜色处理相关
    2、Image processing : 40 filters , 图像处理相关.
    3、Blending modes : 29 filters , 混合模式相关.
    4、Visual effects : 25 filters , 视觉效果相关.

    GPUImageNonMaximumSuppressionFilter 属于 GPUImage 图像视觉效果相关,用来处理**图像图像显示亮度最高的像素,其他为黑效果**。shader 源码如下:

    /******************************************************************************************/
    //@Author:猿说编程
    //@Blog(个人博客地址): www.codersrc.com
    //@File:IOS – OpenGL ES GPUImage 图像显示亮度最高的像素,其他为黑 GPUImageNonMaximumSuppressionFilter
    //@Time:2022/06/21 06:30
    //@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
    /******************************************************************************************/
    
    
    #if TARGET_IPHONE_SIMULATOR || TARGET_OS_IPHONE
    NSString *const kGPUImageNonMaximumSuppressionFragmentShaderString = SHADER_STRING
    (
     uniform sampler2D inputImageTexture;
    
     varying highp vec2 textureCoordinate;
     varying highp vec2 leftTextureCoordinate;
     varying highp vec2 rightTextureCoordinate;
    
     varying highp vec2 topTextureCoordinate;
     varying highp vec2 topLeftTextureCoordinate;
     varying highp vec2 topRightTextureCoordinate;
    
     varying highp vec2 bottomTextureCoordinate;
     varying highp vec2 bottomLeftTextureCoordinate;
     varying highp vec2 bottomRightTextureCoordinate;
    
     void main()
     {
         lowp float bottomColor = texture2D(inputImageTexture, bottomTextureCoordinate).r;
         lowp float bottomLeftColor = texture2D(inputImageTexture, bottomLeftTextureCoordinate).r;
         lowp float bottomRightColor = texture2D(inputImageTexture, bottomRightTextureCoordinate).r;
         lowp vec4 centerColor = texture2D(inputImageTexture, textureCoordinate);
         lowp float leftColor = texture2D(inputImageTexture, leftTextureCoordinate).r;
         lowp float rightColor = texture2D(inputImageTexture, rightTextureCoordinate).r;
         lowp float topColor = texture2D(inputImageTexture, topTextureCoordinate).r;
         lowp float topRightColor = texture2D(inputImageTexture, topRightTextureCoordinate).r;
         lowp float topLeftColor = texture2D(inputImageTexture, topLeftTextureCoordinate).r;
    
         // Use a tiebreaker for pixels to the left and immediately above this one
         lowp float multiplier = 1.0 - step(centerColor.r, topColor);
         multiplier = multiplier * (1.0 - step(centerColor.r, topLeftColor));
         multiplier = multiplier * (1.0 - step(centerColor.r, leftColor));
         multiplier = multiplier * (1.0 - step(centerColor.r, bottomLeftColor));
    
         lowp float maxValue = max(centerColor.r, bottomColor);
         maxValue = max(maxValue, bottomRightColor);
         maxValue = max(maxValue, rightColor);
         maxValue = max(maxValue, topRightColor);
    
         gl_FragColor = vec4((centerColor.rgb * step(maxValue, centerColor.r) * multiplier), 1.0);
     }
    );
    #else
    NSString *const kGPUImageNonMaximumSuppressionFragmentShaderString = SHADER_STRING
    (
     uniform sampler2D inputImageTexture;
    
     varying vec2 textureCoordinate;
     varying vec2 leftTextureCoordinate;
     varying vec2 rightTextureCoordinate;
    
     varying vec2 topTextureCoordinate;
     varying vec2 topLeftTextureCoordinate;
     varying vec2 topRightTextureCoordinate;
    
     varying vec2 bottomTextureCoordinate;
     varying vec2 bottomLeftTextureCoordinate;
     varying vec2 bottomRightTextureCoordinate;
    
     void main()
     {
         float bottomColor = texture2D(inputImageTexture, bottomTextureCoordinate).r;
         float bottomLeftColor = texture2D(inputImageTexture, bottomLeftTextureCoordinate).r;
         float bottomRightColor = texture2D(inputImageTexture, bottomRightTextureCoordinate).r;
         vec4 centerColor = texture2D(inputImageTexture, textureCoordinate);
         float leftColor = texture2D(inputImageTexture, leftTextureCoordinate).r;
         float rightColor = texture2D(inputImageTexture, rightTextureCoordinate).r;
         float topColor = texture2D(inputImageTexture, topTextureCoordinate).r;
         float topRightColor = texture2D(inputImageTexture, topRightTextureCoordinate).r;
         float topLeftColor = texture2D(inputImageTexture, topLeftTextureCoordinate).r;
    
         // Use a tiebreaker for pixels to the left and immediately above this one
         float multiplier = 1.0 - step(centerColor.r, topColor);
         multiplier = multiplier * (1.0 - step(centerColor.r, topLeftColor));
         multiplier = multiplier * (1.0 - step(centerColor.r, leftColor));
         multiplier = multiplier * (1.0 - step(centerColor.r, bottomLeftColor));
    
         float maxValue = max(centerColor.r, bottomColor);
         maxValue = max(maxValue, bottomRightColor);
         maxValue = max(maxValue, rightColor);
         maxValue = max(maxValue, topRightColor);
    
         gl_FragColor = vec4((centerColor.rgb * step(maxValue, centerColor.r) * multiplier), 1.0);
     }
    );
    #endif
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96

    二.效果演示

    使用 GPUImageNonMaximumSuppressionFilter 完成图像显示亮度最高的像素,其他为黑****,原图如下:

    使用 GPUImageNonMaximumSuppressionFilter 完成图像显示亮度最高的像素,其他为黑****,效果如下:

    三.源码下载

    OpenGL ES Demo 下载地址 : IOS – OpenGL ES GPUImage 图像显示亮度最高的像素,其他为黑 GPUImageNonMaximumSuppressionFilter

    四.猜你喜欢

    1. IOS – OPenGL ES 设置图像亮度 GPUImageBrightnessFilter
    2. IOS – OPenGL ES 调节图像曝光度 GPUImageExposureFilter
    3. IOS – OpenGL ES 调节图像对比度 GPUImageContrastFilter
    4. IOS – OPenGL ES 调节图像饱和度 GPUImageSaturationFilter
    5. IOS – OPenGL ES 调节图像伽马线 GPUImageGammaFilter
    6. IOS – OpenGL ES 调节图像反色 GPUImageColorInvertFilter
    7. IOS – OpenGL ES 调节图像褐色 GPUImageSepiaFilter
    8. IOS – OpenGL ES 调节图像灰色 GPUImageGrayscaleFilter
    9. IOS – OpenGL ES 调节图像 RGB 通道 GPUImageRGBFilter
    10. IOS – OpenGL ES 调节图像不透明度 GPUImageOpacityFilter
    11. IOS – OpenGL ES 调节图像阴影 GPUImageHighlightShadowFilter
    12. IOS – OpenGL ES 调节图像色彩替换 GPUImageFalseColorFilter
    13. GPUImage – 色彩直方图 GPUImageHistogramFilter
    14. GPUImage – 色彩直方图 GPUImageHistogramGenerator
    15. GPUImage – 像素平均色值 GPUImageAverageColor
    16. GPUImage – 亮度平均 GPUImageLuminosity
    17. IOS – OpenGL ES 调节图像色度 GPUImageHueFilter
    18. IOS – OpenGL ES 指定颜色抠图 GPUImageChromaKeyFilter
    19. IOS – OpenGL ES 调节图像白平衡/色温 GPUImageWhiteBalanceFilter
    20. IOS – OpenGL ES 设置图像 lookup 滤镜 GPUImageLookupFilter
    21. IOS – OpenGL ES 设置图像滤镜 GPUImageAmatorkaFilter
    22. IOS – OpenGL ES 设置图像滤镜 GPUImageSoftEleganceFilter
    23. IOS – OpenGL ES 设置图像锐化 GPUImageSharpenFilter
    24. IOS – OpenGL ES 绘制十字 GPUImageCrosshairGenerator
    25. IOS – OpenGL ES 绘制线条 GPUImageLineGenerator
    26. IOS – OpenGL ES 设置图像黑白燥点 GPUImageLocalBinaryPatternFilter
    27. IOS – OpenGL ES 设置图像卡通效果(黑色粗线描边) GPUImageToonFilter
    28. IOS – OpenGL ES 桑原滤波/水粉画模糊效果 GPUImageKuwaharaFilter
    29. IOS – OpenGL ES 黑白马赛克效果 GPUImageMosaicFilter
    30. IOS – OpenGL ES 像素化马赛克效果 GPUImagePixellateFilter
    31. IOS – OpenGL ES 同心圆像素化马赛克效果 GPUImagePolarPixel
    32. IOS – OpenGL ES 黑白网状效果 GPUImageCrosshatchFilter
    33. IOS – OpenGL ES 色彩丢失/模糊效果 GPUImageColorPackingFilter
    34. IOS – OpenGL ES 图像晕影 GPUImageVignetteFilter
    35. IOS – OpenGL ES 图像漩涡 GPUImageSwirlFilter
    36. IOS – OpenGL ES 图像鱼眼扩散效果 GPUImageBulgeDistortionFilter
    37. IOS – OpenGL ES 图像鱼眼移动效果 GPUImageBulgeDistortionFilter
    38. IOS – OpenGL ES 图像凹面镜移动效果 GPUImagePinchDistortionFilter
    39. IOS – OpenGL ES 图像凹面镜放大效果 GPUImagePinchDistortionFilter
    40. IOS – OpenGL ES 图像哈哈镜效果 GPUImageStretchDistortionFilter
    41. IOS – OpenGL ES 图像水晶球效果 GPUImageGlassSphereFilter
    42. IOS – OpenGL ES 图像球形折射 GPUImageSphereRefractionFilter
    43. IOS – OpenGL ES 图像色调分离噪点效果 GPUImagePosterizeFilter
    44. IOS – OpenGL ES 图像 CGA 色彩滤镜 GPUImageCGAColorspaceFilter
    45. IOS – OpenGL ES 图像柏林噪点/花边噪点 GPUImagePerlinNoiseFilter
    46. IOS – OpenGL ES 图像加亮边缘 GPUImage3x3ConvolutionFilter
    47. IOS – OpenGL ES 图像浮雕 3d 效果 GPUImageEmbossFilter
    48. IOS – OpenGL ES 图像马赛克圆点 GPUImagePolkaDotFilter
    49. IOS – OpenGL ES 图像侵蚀边缘黑白模糊 GPUImageErosionFilter
    50. IOS – OpenGL ES 图像侵蚀边缘色彩模糊 GPUImageRGBErosionFilter
    51. IOS – OpenGL ES 图像扩展边缘黑白模糊 GPUImageDilationFilter
    52. IOS – OpenGL ES 图像扩展边缘彩色模糊 GPUImageRGBDilationFilter
    53. IOS – OpenGL ES GPUImage 黑白色调模糊 GPUImageOpeningFilter
    54. IOS – OpenGL ES GPUImage 彩色模糊 GPUImageRGBOpeningFilter
    55. IOS – OpenGL ES GPUImage 图像黑白色调模糊/暗色提亮 GPUImageClosingFilter
    56. IOS – OpenGL ES GPUImage 图像彩色调模糊/暗色提亮 GPUImageRGBClosingFilter
    57. IOS – OpenGL ES GPUImage 图像 Lanczos 重取样模糊效果 GPUImageLanczosResamplingFilter
    58. IOS – OpenGL ES GPUImage 图像显示亮度最高的像素,其他为黑 GPUImageNonMaximumSuppressionFilter
  • 相关阅读:
    之前续写抖音开发者接入字节小游戏的缓存一下,现在说一下在 Windows 或者 Mac 如何用终端更换路径?
    Redis的基础与django使用redis
    人工智能之机器学习
    算法-递推
    Python 实现单例模式的五种写法!
    QT搭建的Ros/librviz的GUI软件
    这两个面试题一口气全做对的没几个吧
    剑指 Offer 30. 包含min函数的栈C++(详解)
    Spring Boot 2.x系列【8】功能篇之自定义启动Banner
    Docker 学习笔记一
  • 原文地址:https://blog.csdn.net/ZhaDeNianQu/article/details/125549696
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号