項目地址,歡迎star
https://github.com/ly85206559/recursiveBlur
對圖像模糊的算法主要分為兩種
1.均值模糊(Box blur)
2.高斯模糊
這里使用了高斯模糊算法
高斯模糊的優(yōu)化算法也有很多
這里的優(yōu)化主要有兩方面
1.針對傳統(tǒng)的高斯模糊進(jìn)行降維計算(這里主要是基于二維高斯模糊可以轉(zhuǎn)換成兩個一維高斯模糊計算)
2.采用遞歸高斯模糊(這種算法與模糊半徑無關(guān),所以時間復(fù)雜度緊與圖片像素有關(guān))
這里實現(xiàn)了這兩種模糊算法,并且比較了這兩種模糊算法的耗時,模糊效果
上圖:分別模糊半徑為3,10,25,對比耗時(圖片的分辨率是216*284)

模糊半徑為3.jpg

模糊半徑為10.jpg

模糊半徑為25.jpg
可以看出遞歸高斯模糊的耗時跟模糊半徑無關(guān),耗時也很短,不過看模糊效果跟傳統(tǒng)高斯模糊還是有點區(qū)別,項目中使用也比較簡單
//傳統(tǒng)高斯模糊調(diào)用方法
public static Bitmap gaussBlurNatively(Bitmap original, int radius, boolean canReuseInBitmap)
//遞歸高斯模糊調(diào)用方法
public static Bitmap recursiveBlurNatively(Bitmap original, int radius, boolean canReuseInBitmap)
JNI部分的代碼是用的C,至于高斯模糊和遞歸高斯模糊的具體公式,網(wǎng)上有很多參考,這里主要是對android的一層封裝和算法的一些優(yōu)化