對圖像進行平滑處理實則就是對圖像進行濾波操作罷了
每張圖片都有若干個像素點所構成,濾波操作上就是將照片上的某些部分像素點進行修改從而達到平滑的效果
先展示一下原圖
import cv2
img = cv2.imread('E:\Jupyter_workspace\study\data/test1.png')cv2.imshow('test1',img)#以test1為命名的窗口進行顯示
cv2.waitKey(0)
cv2.destroyAllWindows()
均值濾波
簡單的平均卷積操作
先確定卷積核的大小,然后把圖像按照卷積核(也就是一個二維矩陣,一般取奇數)的大小進行分組,每一個卷積核作為一組,再將每組的數值進行相加求平均值,然后把該平均值代替這一組的所有數值
cv2.blur(img,(3,3))
第一個參數:輸入的圖像對象數據
第二個參數:核的大小 一般的為奇數的二維數組,然后把這個二維數組進行求均值分別替代這個二維數組里面的值,每一個二維數組進行一次求均值,把整個圖像按照[3,3]的二維數組進行劃分
import cv2blur = cv2.blur(img,(3,3))cv2.imshow('JZLB',blur)
cv2.waitKey(0)
cv2.destroyAllWindows()
方框濾波
基本和均值濾波一樣,可以選擇歸一化
cv2.boxFilter(img,-1,(3,3),normalize=True)
cv2.boxFilter(img,-1,(3,3),normalize=False)
第一個參數:輸入的圖像對象數據
第二個參數:-1表示得到的顏色通道數和原圖是一致的,通常情況也都是-1
第三個參數:卷積核[3,3]的矩陣
第四個參數:是否要做歸一化
True 當卷積求和越界時,處理個均值濾波效果完全一致
False 當卷積求和越界時,只要大于255時所有的值均取255
import cv2box = cv2.boxFilter(img,-1,(3,3),normalize=True)cv2.imshow('FKLB_True',box)
cv2.waitKey(0)
cv2.destroyAllWindows()
import cv2box = cv2.boxFilter(img,-1,(3,3),normalize=False)cv2.imshow('FKLB_False',box)
cv2.waitKey(0)
cv2.destroyAllWindows()
高斯濾波
高斯濾波實則就是正態分布那個圖像,也就是按權值進行劃分
同樣需要給出一個卷積核的大小,然后取平均值,之后在每個卷積核內,離平均值越近的數值權值越大,當然離平均值越遠的數值權值越小
cv2.GaussianBlur(img,(5,5),1)
import cv2aussian = cv2.GaussianBlur(img,(5,5),1)cv2.imshow('GSLB',aussian)
cv2.waitKey(0)
cv2.destroyAllWindows()
中值濾波
在一個卷積核中,選取中位數當成最后處理的結果
cv2.medianBlur(img,5)
import cv2median = cv2.medianBlur(img,5)cv2.imshow('ZZLB',median)
cv2.waitKey(0)
cv2.destroyAllWindows()
將所有的濾波方式展示在一塊
import cv2
import numpy as np#res = np.vstack((blur,aussian,median))#上下展示
res = np.hstack((blur,aussian,median))#左右展示#print(res)cv2.imshow('JZ-GS-ZZ',res)
cv2.waitKey(0)
cv2.destroyAllWindows()