模糊操作(OpenCV+Python)

1.均值模糊

import cv2 as cv

def blur_demo(image):   #均值模糊  去随机噪声
    dst = cv.blur(image,(1,15))   #(x,y)  x,y为水平和垂直模糊
    cv.namedWindow('blur_demo',cv.WINDOW_NORMAL)
    cv.imshow('blur_demo',dst)

src = cv.imread(r'C:\pics\samples\data\lena.jpg')
cv.namedWindow("input_image",cv.WINDOW_NORMAL)
cv.imshow("input_image",src)

blur_demo(src)

cv.waitKey(0)
cv.destroyAllWindows()

模糊操作(OpenCV+Python)_第1张图片
2.中值模糊

import cv2 as cv
def median_blur_demo(image):   #中值模糊  对椒盐噪声去除
    dst = cv.medianBlur(image,5)
    cv.namedWindow('median_blur_demo',cv.WINDOW_NORMAL)
    cv.imshow("median_blur_demo",dst)

src = cv.imread(r'C:\pics\samples\data\lena.jpg')
cv.namedWindow("input_image",cv.WINDOW_NORMAL)
cv.imshow("input_image",src)
median_blur_demo(src)
cv.waitKey(0)
cv.destroyAllWindows()

模糊操作(OpenCV+Python)_第2张图片
3.用户自定义模糊

import cv2 as cv
import numpy as np
def custom_blur_demo(image):  #用户自定义模糊
    #kernel = np.ones([5,5],np.float32)/25   #除25为了防止数值溢出
    kernel = np.array([[0,-1,0],[-1,5,-1],[0,-1,1]],np.float32)
    dst = cv.filter2D(image,-1,kernel = kernel)
    cv.namedWindow('custom_blur_demo',cv.WINDOW_NORMAL)
    cv.imshow("custom_blur_demo",dst)

src = cv.imread(r'C:\pics\samples\data\lena.jpg')
cv.namedWindow("input_image",cv.WINDOW_NORMAL)
cv.imshow("input_image",src)
custom_blur_demo(src)

cv.waitKey(0)
cv.destoryAllWindows()

模糊操作(OpenCV+Python)_第3张图片

最后:
1.均值滤波是典型的线性滤波算法,它是指在图像上对目标像素给一个模板,该模板包括了其周围的临近像素(以目标像素为中心的周围8个像素,构成一个滤波模板,即去掉目标像素本身),再用模板中的全体像素的平均值来代替原来像素值。

低通滤波(均值模糊)函数原型:blur(src, ksize[, dst[, anchor[, borderType]]]) -> dst

src参数表示待处理的输入图像。

ksize参数表示模糊内核大小。比如(1,15)表示生成的模糊内核是一个1*15的矩阵。

dst参数表示输出与src相同大小和类型的图像。

anchor参数、borderType参数可忽略

2.中值滤波法是一种非线性平滑技术,它将每一像素点的灰度值设置为该点某邻域窗口内的所有像素点灰度值的中值。具体原理参见博客:https://blog.csdn.net/weixin_37720172/article/details/72627543

中值滤波(中值模糊)函数原型:medianBlur(src, ksize[, dst]) -> dst

src参数表示待处理的输入图像。

ksize参数表示滤波窗口尺寸,必须是奇数并且大于1。比如这里是5,中值滤波器就会使用5×5的范围来计算,即对像素的中心值及其5×5邻域组成了一个数值集,对其进行处理计算,当前像素被其中值替换掉。

dst参数表示输出与src相同大小和类型的图像。

3.用户自定义模糊

所用函数:filter2D()

函数原型: filter2D(src, ddepth, kernel[, dst[, anchor[, delta[, borderType]]]]) -> dst

src参数表示待处理的输入图像。

ddepth参数表示目标图像深度,输入值为-1时,目标图像和原图像深度保持一致

kernel: 卷积核(或者是相关核),一个单通道浮点型矩阵。修改kernel矩阵即可实现不同的模糊
参考博客:https://www.cnblogs.com/FHC1994/p/9097231.html

你可能感兴趣的:(模糊操作(OpenCV+Python))