GPUImage濾鏡實戰

2021-07-02 16:50:56 字數 999 閱讀 9276

gpuimage是現在做濾鏡最主流的開源框架,沒有之一。作者bradlarson基於opengl對處理單元進行封裝,提供出gpuimagefilter基類,配合shader,常用濾鏡都拿下不是問題。

下面大致講解下gpuimage裡的一些基本概念,為了表達方便。已經知道請跳過

gpuimage中的幾個概念

⁃ output為輸出源

⁃ intput為輸入源

⁃ filter為濾鏡

所以乙個完整的濾鏡處理流程是這樣的:output+x+input,x

就是濾鏡組(1+個濾鏡)。gpuimage為了方便,新版本中提供了gpuimagefilterpipeline 這個東東,方便使用者使用多個濾鏡組合,不用擔心前後的鏈式邏輯。

gpuimage作者將濾鏡處理和動態濾鏡是分開了的,動態濾鏡是按照上面那個流程,但處理卻是以(output+filter)*x + input

這種邏輯。如果處理一張的效果需要用到多個濾鏡組合,用乙個濾鏡生成一張output,然後傳給下乙個濾鏡處理,這個過程中如果濾鏡疊加次數比較多,或者這個濾鏡效果被呼叫多次,這樣消耗的記憶體是貼別大的,每個濾鏡處理後匯出的output都存在記憶體中,如果原圖特別大,那麼恭喜。。估計記憶體要爆了。

以這條線來走,過程中基本就沒遇到什麼問題,只是**結構設計和封裝耗時。最後濾鏡模組做完實用到專案裡,發現濾鏡模組呼叫完了以後,記憶體上去了下不來,我遇到了這問題時,反覆檢查,所有gpuimage相關元素都已經釋放了,那麼增加的記憶體是哪兒來的呢?後來想到了視訊記憶體,arc環境下,只負責**oc物件的記憶體,視訊記憶體自然需要gpuimage使用者自己來**,這樣也就容易了,翻gpuimage的api,找到了

gpuimagecontext中有個framebuffercache ,就是它了

[[gpuimagecontext

sharedimageprocessingcontext].

framebuffercache

purgeallunassignedframebuffers]。

GPUImage濾鏡之銳化

應用銳化工具可以快速聚焦模糊邊緣,提高影象中某一部位的清晰度或者焦距程度,使影象特定區域的色彩更加鮮明。在應用銳化工具時,若勾選器選項欄中的 對所有圖層取樣 核取方塊,則可對所有可見圖層中的影象進行銳化。但一定要適度。銳化不是萬能的,很容易使東西不真實。在gpuimage中使用gpuimagesha...

GPUImage簡單濾鏡使用(二)

原影象 調整影象的對比度 gpuimagecontrastfilter類提供了此功能。該類中有乙個屬性contrast,我們可以通過修改此屬性值 最大值4.0,最小值0.0,正常值1.0 來達到修改影象對比度的目的,使用方法 gpuimagecontrastfilter filter gpuimag...

GPUImage寫雙輸入的濾鏡

今天主要來講一下怎麼用gpuimage來手擼乙個雙輸入 blend 的濾鏡。那麼先說一下為什麼要自己手擼多輸入的濾鏡 雙輸入的濾鏡其實是三輸入 也就是多個輸入端濾鏡 的簡單版,讓大家比較容易上手。雙輸入的濾鏡可以通過gpuimagetwoinputfilter來實現,只要實現了疊加的演算法就可以了。...