码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • IOS OpenGL ES GPUImage 图像阀值素描,形成有噪点的素描 GPUImageThresholdSketchFilter


    目录

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

    零基础 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 , 视觉效果相关.

    GPUImageThresholdSketchFilter 属于 GPUImage 图像视觉效果相关,用于图像阀值素描,形成有噪点的素描。shader 源码如下:

    /******************************************************************************************/
    //@Author:猿说编程
    //@Blog(个人博客地址): www.codersrc.com
    //@File:IOS – OpenGL ES GPUImage GPUImageThresholdSketchFilter
    //@Time:2022/07/02 06:30
    //@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
    /******************************************************************************************/
    
    
    #if TARGET_IPHONE_SIMULATOR || TARGET_OS_IPHONE
    NSString *const kGPUImageThresholdSketchFragmentShaderString = SHADER_STRING
    (
     precision highp float;
    
     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;
    
     uniform sampler2D inputImageTexture;
     uniform lowp float threshold;
     uniform float edgeStrength;
    
     const highp vec3 W = vec3(0.2125, 0.7154, 0.0721);
    
     void main()
     {
         float bottomLeftIntensity = texture2D(inputImageTexture, bottomLeftTextureCoordinate).r;
         float topRightIntensity = texture2D(inputImageTexture, topRightTextureCoordinate).r;
         float topLeftIntensity = texture2D(inputImageTexture, topLeftTextureCoordinate).r;
         float bottomRightIntensity = texture2D(inputImageTexture, bottomRightTextureCoordinate).r;
         float leftIntensity = texture2D(inputImageTexture, leftTextureCoordinate).r;
         float rightIntensity = texture2D(inputImageTexture, rightTextureCoordinate).r;
         float bottomIntensity = texture2D(inputImageTexture, bottomTextureCoordinate).r;
         float topIntensity = texture2D(inputImageTexture, topTextureCoordinate).r;
         float h = -topLeftIntensity - 2.0 * topIntensity - topRightIntensity + bottomLeftIntensity + 2.0 * bottomIntensity + bottomRightIntensity;
         float v = -bottomLeftIntensity - 2.0 * leftIntensity - topLeftIntensity + bottomRightIntensity + 2.0 * rightIntensity + topRightIntensity;
    
         float mag = (length(vec2(h, v)) * edgeStrength);
         mag = step(threshold, mag);
         mag = 1.0 - mag;
    
         gl_FragColor = vec4(vec3(mag), 1.0);
     }
    );
    #else
    NSString *const kGPUImageThresholdSketchFragmentShaderString = SHADER_STRING
    (
     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;
    
     uniform sampler2D inputImageTexture;
     uniform float threshold;
     uniform float edgeStrength;
    
     const vec3 W = vec3(0.2125, 0.7154, 0.0721);
    
     void main()
     {
         float bottomLeftIntensity = texture2D(inputImageTexture, bottomLeftTextureCoordinate).r;
         float topRightIntensity = texture2D(inputImageTexture, topRightTextureCoordinate).r;
         float topLeftIntensity = texture2D(inputImageTexture, topLeftTextureCoordinate).r;
         float bottomRightIntensity = texture2D(inputImageTexture, bottomRightTextureCoordinate).r;
         float leftIntensity = texture2D(inputImageTexture, leftTextureCoordinate).r;
         float rightIntensity = texture2D(inputImageTexture, rightTextureCoordinate).r;
         float bottomIntensity = texture2D(inputImageTexture, bottomTextureCoordinate).r;
         float topIntensity = texture2D(inputImageTexture, topTextureCoordinate).r;
         float h = -topLeftIntensity - 2.0 * topIntensity - topRightIntensity + bottomLeftIntensity + 2.0 * bottomIntensity + bottomRightIntensity;
         float v = -bottomLeftIntensity - 2.0 * leftIntensity - topLeftIntensity + bottomRightIntensity + 2.0 * rightIntensity + topRightIntensity;
    
         float mag = 1.0 - length(vec2(h, v) * edgeStrength);
         mag = step(threshold, mag);
    
         gl_FragColor = vec4(vec3(mag), 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

    二.效果演示

    使用GPUImageThresholdSketchFilter****,****原图如下:

    使用GPUImageThresholdSketchFilter 效果如下:

    三.源码下载

    OpenGL ES Demo 下载地址 : IOS OpenGL ES GPUImage 图像阀值素描,形成有噪点的素描 GPUImageThresholdSketchFilter

    四.猜你喜欢

    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
    59. IOS OpenGL ES GPUImage 图像显示亮度最高的像素,其他为黑 GPUImageThresholdedNonMaximumSuppressionFilter
    60. IOS OpenGL ES GPUImage 图像 Sobel 边缘检测,类似漫画反色 GPUImageSobelEdgeDetectionFilter
    61. IOS OpenGL ES GPUImage GPUImageWeakPixelInclusionFilter
    62. IOS OpenGL ES GPUImage GPUImageDirectionalNonMaximumSuppressionFilter
    63. IOS OpenGL ES GPUImage 图像阈值边缘检测 GPUImageThresholdEdgeDetectionFilter
    64. IOS OpenGL ES GPUImage 图像普瑞维特(Prewitt)边缘检测 GPUImagePrewittEdgeDetectionFilter
    65. IOS OpenGL ES GPUImage 图像 XYDerivative 边缘检测 GPUImageXYDerivativeFilter
    66. IOS OpenGL ES GPUImage 图像阀值素描,形成有噪点的素描 GPUImageThresholdSketchFilter
  • 相关阅读:
    Python趣味算法入门 - 牛顿迭代法求方程根
    银行主动安全纵深防御体系解决方案
    C++ DAY06 c++多态
    海外腾讯云服务器手机上无法访问外网怎么办??
    Spring 自定义注解 面向切面编程
    火山引擎DataTester智能发布:助力产品降低功能迭代风险
    绿源:“老大哥”冲刺IPO,新的故事如何讲?
    浪潮信息Owen ZHU:大模型百花齐放,算力效率决定速度
    DOM系列之创建元素
    c# 读取xml到dataset中
  • 原文地址:https://blog.csdn.net/ZhaDeNianQu/article/details/126068333
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | 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号