【opencv-python 7】模糊操作

均值模糊

dst = cv.blur(image,(5,5)) # (5,5)卷積核大小

用途:適用於隨機噪聲

中值模糊

dst = cv.medianBlur(image,5)

用途:適用於椒鹽噪聲

自定義模糊

 kernel = np.ones([5,5],np.float32)/25 # 除以25防止數值超過255,溢出
 dst = cv.filter2D(image,-1,kernel=kernel)

用途:用戶根據需要,自定義,靈活性好

自定義模糊操作實現圖像銳化

kernel = np.array([[0,-1,0],[-1,5,-1],[0,-1,0]],np.float32) #使用了圖像的銳化算子
dst = cv.filter2D(image,-1,kernel=kernel)
cv.imshow('sharp_demo',dst)

用途:用於圖像增強,突出邊框特徵

下面是代碼演示

import cv2 as cv
import numpy as np


# 均值模糊,可以去燥,對隨機噪聲效果好
def blur_demo(image):
    dst = cv.blur(image,(5,5)) # (5,5)卷積核大小
    cv.imshow('blur',dst)
    

# 中值模糊,對椒鹽噪聲效果好
def median_blur_demo(image):
    dst = cv.medianBlur(image,5)
    cv.imshow("median_blue",dst)
    

# 自定義
def custom_blur_demo(image):
    kernel = np.ones([5,5],np.float32)/25 # 除以25防止數值超過255,溢出
    dst = cv.filter2D(image,-1,kernel=kernel)
    cv.imshow('custom_blur',dst)


# 利用自定義模糊,實現圖像的銳化
def sharp_demo(image):
    kernel = np.array([[0,-1,0],[-1,5,-1],[0,-1,0]],np.float32)
    dst = cv.filter2D(image,-1,kernel=kernel)
    cv.imshow('sharp_demo',dst)

src = cv.imread('D:/images/lenanoise.png')
cv.imshow('input image',src)

blur_demo(src)
median_blur_demo(src)
custom_blur_demo(src)
sharp_demo(src)

cv.waitKey(0)
cv.destroyAllWindows()

運行效果

高斯模糊

帶有權重的均值模糊,是均值模糊的一種擴展。去噪的效果更好。

高斯模糊對高斯噪聲有明顯的抑制作用

看下面的代碼

import cv2 as cv
import numpy as np

# 方式溢出
def clamp(pv):
    if pv>255:
        return 255
    if pv<0:
        return 0
    else:
        return pv

def gaussian_noise(image):
    h,w,c = image.shape
    for row in range(h):
        for col in range(w):
            s = np.random.normal(0,20,3)
            b = image[row,col,0]
            g = image[row,col,1]
            r = image[row,col,2]
            image[row,col,0] = clamp(b + s[0])
            image[row,col,1] = clamp(g + s[1])
            image[row,col,2] = clamp(r + s[2])
    cv.imshow('guassian_nosie_image',image)

src = cv.imread('D:/images/demo.png')
cv.imshow('input image',src)

dst = cv.GaussianBlur(src,(0,0),15)
cv.imshow('Gaussian_blur',dst)

# 加入高斯噪聲
t1 = cv.getTickCount()
gaussian_noise(src)
t2 = cv.getTickCount()
print('time consume:%.2fs'%((t2-t1)/cv.getTickFrequency()))

# 對加入高斯噪聲後的圖像進行高斯模糊
cv.imshow('Gaussian_blur_after_GaussNoise',cv.GaussianBlur(src,(5,5),0))

cv.waitKey(0)
cv.destroyAllWindows()

運行結果

time consume:2.49s

時間消耗的挺長的

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章