5.Opencv-图像滤波(均值,方框,高斯,中值,双边滤波)

常见的图像滤波操作有:

均值滤波(cv2.blur)
方框滤波(cv2.boxFilter)
高斯滤波(cv2.GaussianBlur)
中值滤波(cv2.medianBlur)
双边滤波(cv2.bilateralFilter)

示例代码

import cv2  
import matplotlib.pyplot as plt
import numpy as np

img = cv2.imread("C:\\Users\\zhangqs\\Desktop\\dog.png", cv2.IMREAD_COLOR)
def cv_show(name, img):
    cv2.imshow(name, img)  # 显示图像
    cv2.waitKey(0)         # 等待时间,单位毫秒,0表示任意键终止
    cv2.destroyAllWindows()

# 在图片上生成椒盐噪声
def add_peppersalt_noise(image, n=10000):
    result = image.copy()
    # 测量图片的长和宽
    w, h =image.shape[:2]
    # 生成n个椒盐噪声
    for i in range(n):
        x = np.random.randint(1, w)
        y=  np.random.randint(1, h)
        if np.random.randint(0, 2) == 0 :
            result[x, y] = 0
        else:
            result[x,y] = 255
    return result

imgnoise = add_peppersalt_noise(img)

#1.均值滤波-简单的平均卷积操作
blur=cv2.blur(img,(3,3)) #卷积核大小3*3,中间像素点=9个像素点和/9,卷积核大小一般都是奇数

#2.方框滤波-基本和均值一样,可以选择归一化
box=cv2.boxFilter(img,-1,(3,3),normalize=True)

#3.高斯滤波
gaussian=cv2.GaussianBlur(img,(5,5),1)

#4.中值滤波
median=cv2.medianBlur(img,5)

#5.双边滤波
bilateral = cv2.bilateralFilter(img, 9, 150, 150)

#合并显示
res=np.hstack((img,imgnoise,blur,gaussian,median,bilateral)) #注意:两层括号
cv2.imshow('all',res)
cv2.waitKey(0)
cv2.destroyAllWindows()
 

运行效果

 更详细的讲解,可以参考以下链接:

Opencv之图像滤波:2.均值滤波(cv2.blur)_Justth.的博客-CSDN博客

Opencv之图像滤波:3.方框滤波(cv2.boxFilter)_Justth.的博客-CSDN博客  

Opencv之图像滤波:4.高斯滤波(cv2.GaussianBlur)_Justth.的博客-CSDN博客

Opencv之图像滤波:5.中值滤波(cv2.medianBlur)_opencv 中值滤波_Justth.的博客-CSDN博客

Opencv之图像滤波:6.双边滤波(cv2.bilateralFilter)_Justth.的博客-CSDN博客

猜你喜欢

转载自blog.csdn.net/a497785609/article/details/131206499