目录
一、卷积
二、方盒滤波与均值滤波
三、高斯滤波
四、中值滤波
五、双边滤波
图像卷积就是卷积核在图像上按行华东遍历像素时不断的相乘求和的过程
相关知识点:
OpenCv中卷积函数:
filter2D(src, ddepth, kernell dstl anchorl deltal borderType]]]])
卷积案例代码如下:
import cv2
import numpy as np
img = cv2.imread('6.jpg')
# 相当于每个点都被平均了一下,所以图像变模糊了
# kernel = np.ones((5,5),np.float32) / 25
# 尝试其它卷积核,突出轮廓
kernel = np.array([[-1,-1,-1],[-1,8,-1],[-1,-1,-1]])
# 浮雕效果
kernel = np.array([[-2,1,0],[-1,1,1],[0,1,2]])
# 锐化
kernel = np.array([[0,-1,0],[-1,5,-1],[0,-1,0]])
# ddepth = -1表示图片的数据类型不变
dst = cv2.filter2D(img,-1,kernel)
# 图片展示
cv2.imshow('img',np.hstack((img,dst)))
cv2.waitKey(0)
cv2.destroyAllWindows()
运行结果如下:
方盒滤波案例代码如下:
import cv2
import numpy as np
# 读取图片
img = cv2.imread('6.jpg')
# 无需手动创建卷积核,只需要告诉方盒滤波,卷积核的大小是多少
dst = cv2.boxFilter(img,-1,(5,5),normalize=True)
cv2.imshow('img',np.hstack((img,dst)))
cv2.waitKey(0)
cv2.destroyAllWindows()
均值滤波案例代码如下:
import cv2
import numpy as np
# 读取图片
img = cv2.imread('6.jpg')
# 均值滤波无位深这个参数
dst = cv2.blur(img,(5,5))
cv2.waitKey(0)
cv2.destroyAllWindows()
首先明白什么是高斯函数:
高斯函数是在符合高斯分布(也叫正态分布)的数据的概率密度函数
高斯函数的一般形式:
参照函数:
案例代码如下:
import cv2
import numpy as np
img = cv2.imread('6.jpg')
# 高斯滤波
new_img = cv2.GaussianBlur(img,(5,5),sigmaX=10)
cv2.imshow('new_img',np.hstack((img,new_img)))
cv2.waitKey(0)
cv2.destroyAllWindows()
中值滤波的原理:假设有一个数组[1,5,5,6,7,8,9],取中间值(即中位数)作为卷积后的结果即可.中值滤波对胡椒噪音(也叫椒盐噪音)效果明显
案例代码如下:
import cv2
import numpy as np
img = cv2.imread('6.jpg')
# 注意这里的ksize就是一个整数
# 中值滤波
dst = cv2.medianBlur(img,5)
cv2.imshow('img',np.hstack((img,dst)))
cv2.waitKey(0)
cv2.destroyAllWindows()
双边滤波原理:双边滤波对于图像的边缘信息能过更好的保存。其原理为一个与空间举例相关的高斯函数与一个灰度距离相关的高斯函数相乘。
双边滤波可以保留边缘,同时可以对边缘内的区域进行平滑处理
参照函数:
案例代码如下:
import cv2
import numpy as np
img = cv2.imread('6.jpg')
# sigmaColor为灰度距离
# sigmaSpace为空间距离
dst = cv2.bilateralFilter(img,7,sigmaColor=20,sigmaSpace=50)
cv2.imshow('img',np.hstack((img,dst)))
cv2.waitKey(0)
cv2.destroyAllWindows()