Python + OpenCV 學習筆記(八)>>> 利用卷積對影象模糊處理
阿新 • • 發佈:2018-12-18
模糊操作基本原理:
- 基於離散卷積
- 定義好每個卷積核
- 不同卷積核得到不同的卷積效果
- 模糊是卷積的一種表象
程式碼層面知識點
- 均值模糊
- 中值模糊
- 自定義模糊
- 意義與應用場合
----------------------------------------------------------------
卷積
均值模糊
此程式碼與上文無關…
def blur_image(image): #均值模糊
cv.imshow('fruit' , image)
dst = cv.blur(image, (20,15)) #選取一個20×15 卷積核
cv.imshow('blurred', dst)
中值模糊
中值模糊就是用與卷積框對應畫素的中值來替代中心畫素的值。中值模糊常用於去除椒鹽噪聲。
均值模糊是用計算得到的一個新值來取代中心畫素的值,而中值模糊是用中心畫素周圍(或其自身)的值來取代它。
def median_blur(image):
cv.imshow('fruit', image)
dst = cv.medianBlur( image, 5)
cv.imshow('median_blur', dst)
自定義模糊/銳化
自定義模糊:
def custom_blur(image):
cv.imshow('image', image)
kernel1 = np.ones((5,5), np.float)/25
dst = cv.filter2D(image, -1, kernel1)
cv.imshow('blurred', dst)
自定義銳化:
def custom_blur(image):
cv. imshow('image', image)
kernel1 = np.array(((0,-1,0), (-1,5,-1), (0,-1,0)), np.float)
dst = cv.filter2D(image, -1, kernel1)
cv.imshow('blurred', dst)
filter2D(src,ddepth,kernel)
:
引數 | 說明 |
---|---|
src | 目標影象 |
ddepth | 深度,輸入值為-1時,目標影象和原影象深度保持一致 |
kernel | 卷積核(或者是相關核),一個單通道浮點型矩陣 |
經試驗,在三維矩陣當中,卷積核為((0,-1,0), (-1,5,-1), (0,-1,0)) 的效果最為理想
高斯模糊
將卷積核換成高斯核(方框不變,將原來每個方框的相等的值替換成符合高斯分佈的新值,其方框中心的值最大,其餘值根據其距離中心的距離遞減)
其與均值模糊最大不同在於,雖然圖片模糊化,但其基本輪廓可見
src = cv.imread('/home/pi/Desktop/apple.jpg')
dst = cv.GaussianBlur(src, (0,0), 15)
cv.imshow('GaussianBlur', dst)
------------------------------------------------------------------
利用模糊給圖片打碼:
def cut(image):
cut = image[300:384, 250:340]
return cut
def blur(image):
blur = cv.blur(image, (50,50))
return blur
def connect(image):
image[300:384, 250:340] = blur(cut(image))
cv.imshow('result', image)
src = cv.imread('/home/pi/Desktop/woman.jpg')
cv.imshow('image', src)
connect(src)