毛玻璃其實就是磨砂玻璃,圖像經過毛玻璃模糊效果后能夠模糊的看清背后的風景,讓人感覺有種朦朧美,讓界面看上去很有層次感。
我們知道了圖像馬賽克效果是通過設置一個指定大小的像素塊並將其中的所有像素點設置成統一值實現的。與圖像的馬賽克效果類似,圖像的毛玻璃模糊效果也是通過修改像素點的顏色值來實現的,只不過是通過像素點隨機替換來修改像素點的顏色值
如上圖所示,左邊為原圖像的某5個像素點,我們假設隨機替換值為5,即隨機替換的范圍為0-4。那么對於原圖像上的某個像素點(x,y)的顏色值,我們將用原圖像上的另一個像素點(x+隨機值,y+隨機值)的顏色值進行替換,即(x,y)=(x+隨機值,y+隨機值)。經過一系列像素點變換后,就得到了類似右邊的圖像,從而實現圖像的毛玻璃模糊效果。
首先按照慣例使用imread()函數讀取原圖像的圖像數據,並通過shape屬性獲取出圖像的寬高信息。接着新建一個圖像空模板,大小和形狀與原圖像保持一致。同時設置隨機替換值,這里我們設置為5。然后開始遍歷像素點,利用我們設置的隨機替換值使用random模塊的random.randint函數產生一個隨機整數值,對像素點進行隨機替換。
import cv2 import numpy as np import random img = cv2.imread("2013.jpg",1) #讀取一張圖片,彩色 cha=img.shape height,width,deep=cha cv2.imshow('img',img) dst=np.zeros(cha,np.uint8) randon_v=5 #用來替換的范圍--這個值越大毛玻璃效果越明顯 #防止越界 for m in range(height-randon_v): #毛玻璃效果 for n in range(width-randon_v): index=random.randint(1,randon_v) (b,g,r)=img[m+index,n+index] dst[m,n]=(b,g,r) cv2.imshow('dst',dst) cv2.waitKey()
右邊的圖就實現了圖像的毛玻璃模糊效果,根據我們設置的隨機替換值大小,毛玻璃的模糊程度會隨之不同。隨機替換值越大,毛玻璃模糊程度也就越大。由於我們未對邊界值進行處理,因此經過毛玻璃模糊效果處理后的圖像右邊和下邊都有黑色的邊界。如果要處理,最簡單的可以遍歷黑色邊界像素,用附近像素的顏色值進行填充即可。
效果圖:
下面我把隨機值改為10:
import cv2 import numpy as np import random img = cv2.imread("2013.jpg",1) #讀取一張圖片,彩色 cha=img.shape height,width,deep=cha cv2.imshow('img',img) dst=np.zeros(cha,np.uint8) randon_v=10 #用來替換的范圍--這個值越大毛玻璃效果越明顯 #防止越界 for m in range(height-randon_v): for n in range(width-randon_v): index=random.randint(1,randon_v) (b,g,r)=img[m+index,n+index] dst[m,n]=(b,g,r) cv2.imshow('dst',dst) cv2.waitKey()
效果圖: