平滑 去噪 模糊化
在像素与邻近像素的亮度差值小于一个特定值时平滑该像素的亮度,降低图像变化率。
在像素与邻近像素的亮度差值很大时增加该像素的亮度
–>
均值模糊
dst = cv2.blur(image,(5,5))
import cv2 as cv
import numpy as np
def blur_demo(image):
dst = cv.blur(image,(5,5))
cv.imshow("blur_demo",dst)
–>
中值模糊 过滤椒盐噪声
dst = cv2.medianBlur(image,5)
def median_blur_demo(image):
dst = cv.medianBlur(image,5)
cv.imshow("median_blur_demo", dst)
–>
自定义核
dst = cv.filter2D(image,-1,kernel)
-1 :此时与原图像深度保持一致
kernel : 自定义的核
def custom_blur_demo(image):
kernel1 = np.ones([5,5],np.float32)/25 #相当于均值模糊,记住需要除以元素个数防止溢出
dst1 = cv.filter2D(image,-1,kernel1)
cv.imshow("custom_blur_demo1", dst1)
kernel2 = np.array([[-1,-1,-1],
[-1,9,-1],
[-1,-1,-1]]) #锐化,差异增加 权重为1,不改变亮度
dst2 = cv.filter2D(image, -1, kernel2)
cv.imshow("custom_blur_demo2", dst2)
kernel3 = np.array([[0, -1, 0],
[-1, 5, -1],
[0, -1, 0]]) # 锐化,总和为1
dst3 = cv.filter2D(image, -1, kernel3)
cv.imshow("custom_blur_demo3", dst3)
kernel4 = np.array([[-1, -1, -1],
[-1, 8, -1],
[-1, -1, -1]]) #权重为0,-->边缘检测核,边缘为白,非边缘为黑
dst4 = cv.filter2D(image, -1, kernel4)
cv.imshow("custom_blur_demo4", dst4)
kernel5 = np.array([[-2, -1, 0],
[-1, 1, 1],
[0, 1, 2]]) #同时具有 模糊(正值) 和 锐化(负值) 的作用
dst5 = cv.filter2D(image, -1, kernel5) #产生脊状或浮雕效果
cv.imshow("custom_blur_demo5", dst5)
[[-1,-1,-1],
[-1,9,-1],
[-1,-1,-1]]
核,大小为3(3x3),为一组像素值 权重 的集合
也称为卷积矩阵,二维数组,奇数行,奇数列
–>
高斯滤波(正态)过滤随机噪声
cv2.GaussianBlur(img, (5, 5), 0)
(5,5):ksize,高斯内核的大小,都为奇数,可以不相同若为0由sigma计算,值越大越模糊
0 :sigmax,X方向上的标准偏差,为0时由ksize计算,值越大越模糊
def gaussian_blur(img):
dst = cv.GaussianBlur(img, (5, 5), 0)
cv.imshow("gaussian",dst)
dst1 = cv.GaussianBlur(img, (11, 11), 3)
cv.imshow("gaussian1", dst1)
dst2 = cv.GaussianBlur(img, (3, 3), 11)
cv.imshow("gaussian2", dst2)
–>
双边滤波(边缘保留) 保持图像特征 相当于磨皮滤镜 (文字可保留) 效率不高
颜色差异大则权重小,颜色差异小则权重大
dst = cv2.bilateralFilter(img, 0, 100, 15)
0 : d,过滤过程中像素的邻域直径范围,<=0时 由sigmaSpace计算
100 : sigmaColor,空间高斯函数标准差, 越大则该邻域内颜色差异越大的颜色将被混合
15 : sigmaSpace,灰度值相似性高斯函数标准差,越大则距离越远的颜色相近的颜色将相互影响
def bi_demo(img):
dst1 = cv.bilateralFilter(img, 0, 100, 15)
cv.imshow("bi_demo1", dst1)
dst2 = cv.bilateralFilter(img, 0, 15, 100)
cv.imshow("bi_demo2", dst2)
dst3 = cv.bilateralFilter(img, 0, 15, 15)
cv.imshow("bi_demo3", dst3)
dst4 = cv.bilateralFilter(img, 0, 100, 100) #电脑比较烂...结果这个慢到怀疑人生
so,sigmaColor较大sigmaSpace较小时,效果效果较好
–>
均值边缘保留滤波 平滑色彩细节
dst = cv2.pyrMeanShiftFiltering(img, 10, 50)
10 : 空间窗半径
50 :色彩窗半径
def shift_demo(img):
dst = cv.pyrMeanShiftFiltering(img, 10, 50)
cv.imshow("shift_demo", dst)
print("----------------------")
src1 = cv.imread("D:/sourses/picture/001.jpg")
src2 = cv.imread("D:/sourses/picture/1.1.png")
cv.imshow("image", src1)
#cv.imshow("image", src2)
blur_demo(src2)
median_blur_demo(src2)
custom_blur_demo(src2)
gaussian_blur(src2)
bi_demo(src1)
shift_demo(src1)
cv.waitKey(0)
cv.destroyAllWindows()