对图像进行平滑处理实则就是对图像进行滤波操作罢了
每张图片都有若干个像素点所构成,滤波操作上就是将照片上的某些部分像素点进行修改从而达到平滑的效果
先展示一下原图
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()