IOS OpenGL ES GPUImage 圖像 XYDerivative 邊緣檢測 GPUImageXYDerivativeFilter

来源:https://www.cnblogs.com/shuopython/archive/2022/07/30/16534411.html
-Advertisement-
Play Games

目錄 一.簡介 二.效果演示 三.源碼下載 四.猜你喜歡 零基礎 OpenGL (ES) 學習路線推薦 : OpenGL (ES) 學習目錄 >> OpenGL ES 基礎 零基礎 OpenGL (ES) 學習路線推薦 : OpenGL (ES) 學習目錄 >> OpenGL ES 轉場 零基礎 O ...


目錄

零基礎 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 , 視覺效果相關.

GPUImageXYDerivativeFilter 屬於 GPUImage 圖像視覺效果相關,用於圖像 XYDerivative 邊緣檢測。shader 源碼如下:

/******************************************************************************************/
//@Author:猿說編程
//@Blog(個人博客地址): www.codersrc.com
//@File:IOS – OpenGL ES GPUImage GPUImageXYDerivativeFilter
//@Time:2022/07/02 06:30
//@Motto:不積跬步無以至千里,不積小流無以成江海,程式人生的精彩需要堅持不懈地積累!
/******************************************************************************************/

#if TARGET_IPHONE_SIMULATOR || TARGET_OS_IPHONE
NSString *const kGPUImageGradientFragmentShaderString = 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 float edgeStrength;

 void main()
 {
     float topIntensity = texture2D(inputImageTexture, topTextureCoordinate).r;
     float topRightIntensity = texture2D(inputImageTexture, topRightTextureCoordinate).r;
     float topLeftIntensity = texture2D(inputImageTexture, topLeftTextureCoordinate).r;
     float bottomIntensity = texture2D(inputImageTexture, bottomTextureCoordinate).r;
     float bottomLeftIntensity = texture2D(inputImageTexture, bottomLeftTextureCoordinate).r;
     float bottomRightIntensity = texture2D(inputImageTexture, bottomRightTextureCoordinate).r;
     float leftIntensity = texture2D(inputImageTexture, leftTextureCoordinate).r;
     float rightIntensity = texture2D(inputImageTexture, rightTextureCoordinate).r;

     float verticalDerivative = -topLeftIntensity - topIntensity - topRightIntensity + bottomLeftIntensity + bottomIntensity + bottomRightIntensity;
     float horizontalDerivative = -bottomLeftIntensity - leftIntensity - topLeftIntensity + bottomRightIntensity + rightIntensity + topRightIntensity;
     verticalDerivative = verticalDerivative * edgeStrength;
     horizontalDerivative = horizontalDerivative * edgeStrength;

     // Scaling the X * Y operation so that negative numbers are not clipped in the 0..1 range. This will be expanded in the corner detection filter
     gl_FragColor = vec4(horizontalDerivative * horizontalDerivative, verticalDerivative * verticalDerivative, ((verticalDerivative * horizontalDerivative) + 1.0) / 2.0, 1.0);
 }
);
#else
NSString *const kGPUImageGradientFragmentShaderString = 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 edgeStrength;

 void main()
 {
     float topIntensity = texture2D(inputImageTexture, topTextureCoordinate).r;
     float topRightIntensity = texture2D(inputImageTexture, topRightTextureCoordinate).r;
     float topLeftIntensity = texture2D(inputImageTexture, topLeftTextureCoordinate).r;
     float bottomIntensity = texture2D(inputImageTexture, bottomTextureCoordinate).r;
     float bottomLeftIntensity = texture2D(inputImageTexture, bottomLeftTextureCoordinate).r;
     float bottomRightIntensity = texture2D(inputImageTexture, bottomRightTextureCoordinate).r;
     float leftIntensity = texture2D(inputImageTexture, leftTextureCoordinate).r;
     float rightIntensity = texture2D(inputImageTexture, rightTextureCoordinate).r;

     float verticalDerivative = -topLeftIntensity - topIntensity - topRightIntensity + bottomLeftIntensity + bottomIntensity + bottomRightIntensity;
     float horizontalDerivative = -bottomLeftIntensity - leftIntensity - topLeftIntensity + bottomRightIntensity + rightIntensity + topRightIntensity;
     verticalDerivative = verticalDerivative * edgeStrength;
     horizontalDerivative = horizontalDerivative * edgeStrength;

     // Scaling the X * Y operation so that negative numbers are not clipped in the 0..1 range. This will be expanded in the corner detection filter
     gl_FragColor = vec4(horizontalDerivative * horizontalDerivative, verticalDerivative * verticalDerivative, ((verticalDerivative * horizontalDerivative) + 1.0) / 2.0, 1.0);
 }
);
#endif

二.效果演示

使用 GPUImageXYDerivativeFilter**,**原圖如下:

使用 GPUImageXYDerivativeFilter 效果如下:

三.源碼下載

OpenGL ES Demo 下載地址 : IOS OpenGL ES GPUImage 圖像 XYDerivative 邊緣檢測 GPUImageXYDerivativeFilter

四.猜你喜歡

  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

本文由博客 - 猿說編程 猿說編程 發佈!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 精華筆記: 1. 變數:存數的 - 聲明: 在銀行開了個帳戶 - 初始化: 給帳戶存錢 - 使用: 使用的是帳戶裡面的錢 - 對變數的使用就是對它所存的那個數的使用 - 變數在使用之前必須聲明並初始化 - 命名: - 只能包含字母、數字、_和$符,並且不能以數字開頭 - 嚴格區分大小寫 - 不能使用 ...
  • 一、python簡介:是什麼,特點是什麼,有什麼用 1、python是什麼? python是一門結合解釋型,編譯性,互動性和麵向對象的腳本語言,具有很強的可讀性,相比其他例如Java語言,C語言更加容易入門。 2、python有哪些特點? 易於學習:python有相對較少的關鍵字,結構簡單,和一個明 ...
  • JetBrAIns GoLand 是Mac os系統上由JetBrAIns推出的一個GO語言集成開發工具環境,基於IntelliJ平臺,支持JetBrAIns插件體系,擁有針對GO語言的代碼助手、代碼編輯器、代碼調試等工具,支持前端和後端開發,並且支持IntelliJ插件,可以大大提高Go語言開發者 ...
  • 配置不同生產環境 本文適用於開發環境下需要打包項目至生產環境,避免開發環境的配置文件泄露。 設置maven 作用:1. 手動調節運行時的不同環境 2. 打包時可以不會有其它環境的文件 註:每次換環境前(打包前)記得手動clean清楚,因為idea不會在換環境後自動清除另一個環境的文件 在pom文件中 ...
  • 介紹 本篇文章主要針對於電腦二級考試的崽崽,當然想瞭解Python和學習Python的崽崽也是可以看本篇文章的;畢竟,手機和電腦都可以運行Python;本篇我文章雖然是筆記,但是也純靠手打,希望關註和點贊一下,期待我的其他隨筆和文章;文章作者由博客園狐小妖用戶撰寫,非來自於博客園且不帶轉載註明,均 ...
  • 前言:最近幾個月很忙,都沒有時間寫文章了,今天周末剛好忙完下班相對早點(20:00下班)就在家把之前想總結的知識點寫出來,於是就有了這篇文章。雖無很高深的技術,但小技巧有大用處。 有時我們經常需要將實現了某個基類或某個介面的所有Bean進行分類管理,在需要用到的時候按需獲取實現了某個基類或某個介面的 ...
  • 最近學習了es的視頻,感覺這個產品對於查詢來說非常方便,但是如何應用到我們自己的 產品中來呢。因為我們的產品數據更新太快,其實不太適合用es做主力存儲。並且我們的業務還沒有到那種巨量級別,產品的伺服器容量也有限,所以我打算根據es的倒排索引的原理,自己寫一個查詢的組件。 我的理解是這樣的,有大量的文 ...
  • 終止線程的執行 一、強制終止線程的執行 強制終止用的是stop()方法,因為這種方法會丟失數據,所以一般不採用這種方法。 原理是直接殺死線程,這樣的話線程中沒有保存的數據就會丟失 /* 在java中強制終止一個線程 */ public class ThreaTest09 { public stati ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...