如何基於GPU實現美顏?

美顏基本概念

GPU:(Graphic Processor Unit圖形處理單元)手機或者電腦用於圖像處理和渲染的硬件框架

GPU工做原理:CPU指定顯示控制器工做,顯示控制器根據CPU的控制到指定的地方去取數據和指令, 目前的數據通常是從顯存裏取,若是顯存裏存不下,則從內存裏取, 內存也放不下,則從硬盤裏取,固然也不是內存放不下,而是爲了節省內存的話,能夠放在硬盤裏,而後經過指令控制顯示控制器去取。ide

OpenGL ES:(Open Graphics Library For Embedded(嵌入的) Systems 開源嵌入式系統圖形處理框架),一套圖形與硬件接口,用於把處理好的圖片顯示到屏幕上。spa

GPUImage:是一個基於OpenGL ES 2.0圖像和視頻處理的開源iOS框架,提供各類各樣的圖像處理濾鏡,而且支持照相機和攝像機的實時濾鏡,內置120多種濾鏡效果,而且可以自定義圖像濾鏡。code

濾鏡處理的原理:就是把靜態圖片或者視頻的每一幀進行圖形變換再顯示出來。它的本質就是像素點的座標和顏色變化orm

GPUImage處理畫面原理

  • GPUImage採用鏈式方式來處理畫面,經過addTarget:方法爲鏈條添加每一個環節的對象,處理完一個target,就會把上一個環節處理好的圖像數據傳遞下一個target去處理,稱爲GPUImage處理鏈。
    • 好比:墨鏡原理,從外界傳來光線,會通過墨鏡過濾,在傳給咱們的眼睛,就能感覺到大白天也是烏黑一片,哈哈
    • 通常的target可分爲兩類
      • 中間環節的target, 通常是各類filter, 是GPUImageFilter或者是子類.
      • 最終環節的target, GPUImageView:用於顯示到屏幕上, 或者GPUImageMovieWriter:寫成視頻文件。
  • GPUImage處理主要分爲3個環節
    • source(視頻、圖片源) -> filter(濾鏡) -> final target (處理後視頻、圖片)
    • GPUImagedSource:都繼承GPUImageOutput的子類,做爲GPUImage的數據源,就比如外界的光線,做爲眼睛的輸出源
      • GPUImageVideoCamera:用於實時拍攝視頻
      • GPUImageStillCamera:用於實時拍攝照片
      • GPUImagePicture:用於處理已經拍攝好的圖片,好比png,jpg圖片
      • GPUImageMovie:用於處理已經拍攝好的視頻,好比mp4文件
    • GPUImagefilter:GPUimageFilter類或者子類,這個類繼承自GPUImageOutput,而且遵照GPUImageInput協議,這樣既能流進,又能流出,就比如咱們的墨鏡,光線經過墨鏡的處理,最終進入咱們眼睛
    • GPUImagefinal target:GPUImageView,GPUImageMovieWriter就比如咱們眼睛,最終輸入目標。

 

美顏原理

  • 磨皮(GPUImageBilateralFilter):本質就是讓像素點模糊,能夠使用高斯模糊,可是可能致使邊緣會不清晰,用雙邊濾波(Bilateral Filter) ,有針對性的模糊像素點,能保證邊緣不被模糊。
  • 美白(GPUImageBrightnessFilter):本質就是提升亮度。

美顏效果

  • 關注效果,忽悠本人

GPUImage原生美顏效果

利用美顏濾鏡實現效果

GPUImage實戰

GPUImage原生美顏

  • 步驟一:使用Cocoapods導入GPUImage
  • 步驟二:建立視頻源GPUImageVideoCamera
  • 步驟三:建立最終目的源:GPUImageView
  • 步驟四:建立濾鏡組(GPUImageFilterGroup),須要組合亮度(GPUImageBrightnessFilter)雙邊濾波(GPUImageBilateralFilter)這兩個濾鏡達到美顏效果.
  • 步驟五:設置濾鏡組鏈
  • 步驟六:設置GPUImage處理鏈,從數據源 => 濾鏡 => 最終界面效果
  • 步驟七:開始採集視頻

注意點:視頻

  • SessionPreset最好使用AVCaptureSessionPresetHigh,會自動識別,若是用過高分辨率,當前設備不支持會直接報錯
  • GPUImageVideoCamera必需要強引用,不然會被銷燬,不能持續採集視頻.
  • 必須調用startCameraCapture,底層纔會把採集到的視頻源,渲染到GPUImageView中,就能顯示了。
  • GPUImageBilateralFilterdistanceNormalizationFactor值越小,磨皮效果越好,distanceNormalizationFactor取值範圍: 大於1

利用美顏濾鏡實現

  • 步驟一:使用Cocoapods導入GPUImage
  • 步驟二:導入GPUImageBeautifyFilter文件夾
  • 步驟三:建立視頻源GPUImageVideoCamera
  • 步驟四:建立最終目的源:GPUImageView
  • 步驟五:建立最終美顏濾鏡:GPUImageBeautifyFilter
  • 步驟六:設置GPUImage處理鏈,從數據源 => 濾鏡 => 最終界面效果

注意:對象

  • 切換美顏效果原理:移除以前全部處理鏈,從新設置處理鏈

圖玩智能科技爲企業提供更穩定更優質的美顏產品及服務,歡迎隨時諮詢www.toivan.com.繼承

相關文章
相關標籤/搜索