項(xiàng)目地址,歡迎star
https://github.com/ly85206559/recursiveBlur
對(duì)圖像模糊的算法主要分為兩種
1.均值模糊(Box blur)
2.高斯模糊
這里使用了高斯模糊算法
高斯模糊的優(yōu)化算法也有很多
這里的優(yōu)化主要有兩方面
1.針對(duì)傳統(tǒng)的高斯模糊進(jìn)行降維計(jì)算(這里主要是基于二維高斯模糊可以轉(zhuǎn)換成兩個(gè)一維高斯模糊計(jì)算)
2.采用遞歸高斯模糊(這種算法與模糊半徑無關(guān)倘零,所以時(shí)間復(fù)雜度緊與圖片像素有關(guān))
這里實(shí)現(xiàn)了這兩種模糊算法戳寸,并且比較了這兩種模糊算法的耗時(shí),模糊效果
上圖:分別模糊半徑為3,10,25疫鹊,對(duì)比耗時(shí)(圖片的分辨率是216*284)
模糊半徑為3.jpg
模糊半徑為10.jpg
模糊半徑為25.jpg
可以看出遞歸高斯模糊的耗時(shí)跟模糊半徑無關(guān)拆吆,耗時(shí)也很短,不過看模糊效果跟傳統(tǒng)高斯模糊還是有點(diǎn)區(qū)別枣耀,項(xiàng)目中使用也比較簡(jiǎn)單
//傳統(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)上有很多參考颅围,這里主要是對(duì)android的一層封裝和算法的一些優(yōu)化