1. 程式人生 > >Python + OpenCV 學習筆記(八)>>> 利用卷積對影象模糊處理

Python + OpenCV 學習筆記(八)>>> 利用卷積對影象模糊處理

模糊操作基本原理:

  1. 基於離散卷積
  2. 定義好每個卷積核
  3. 不同卷積核得到不同的卷積效果
  4. 模糊是卷積的一種表象

程式碼層面知識點

  1. 均值模糊
  2. 中值模糊
  3. 自定義模糊
  4. 意義與應用場合

----------------------------------------------------------------

卷積

均值模糊

在這裡插入圖片描述
此程式碼與上文無關…

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)

在這裡插入圖片描述