python+opencv图像处理基础(三)————图像滤波方式

目录

      • 1. 先人为的给图像加噪声
      • 2.滤波处理
        • 2.1 均值滤波
        • 2.2 高斯滤波
        • 2.3. 中值滤波

今天主要总结图像的几种 滤波方式,见下图

五种常见的图像滤波方式:线性滤波(方框滤波、均值滤波、高斯滤波);非线性滤波(中值滤波、双边滤波)。

python+opencv图像处理基础(三)————图像滤波方式_第1张图片
图片来源于:https://blog.csdn.net/qq_27261889/article/details/80822270侵删

1. 先人为的给图像加噪声

#给图像加噪声
import cv2
import numpy as np
import matplotlib.pyplot as plt
#读取图片
im = cv2.imread('D:\pythonb\wx020.jpg')
rows, cols, chn = im.shape  #把图像的行数返回给rows,列数返回给cols

#加噪声
for i in range(5000):
    x = np.random.randint(0, rows)
    y = np.random.randint(0, cols)
    im[x, y, :] = 0
    
#等待显示
cv2.imshow("noise", im)
cv2.waitKey(0)
cv2.destroyAllWindows()

运行结果如下:
python+opencv图像处理基础(三)————图像滤波方式_第2张图片

2.滤波处理

2.1 均值滤波

均值滤波:均值滤波是指任意一点的像素值,都是周围N*M个像素值的均值。核心函数为:result = cv2.blur(原始图像,核大小);核大小是以(宽度,高度)表示的元祖形式:

2.2 高斯滤波

高斯滤波:在图像高斯平滑中,图像中不同位置的像素与其对应核中的权重相乘,然后再求和。与均值滤波不同的是,核中的权重大小不等。

下图是核分别为 3 * 3 和 5 * 5 的高斯滤波。
python+opencv图像处理基础(三)————图像滤波方式_第3张图片
python+opencv图像处理基础(三)————图像滤波方式_第4张图片
图片来源于:https://blog.csdn.net/Eastmount/article/details/82216380 侵删

核心函数为:dst = cv2.GaussianBlur(src, ksize, sigmaX)
src:原始图像名称,ksize:核大小,sigmaX表示X方向方差。核大小(N, N)必须是奇数。

2.3. 中值滤波

中值滤波:选一个含有奇数点的窗口W,将这个窗口在图像上扫描,把窗口中所含的像素点按灰度级的升或降序排列,取位于中间的灰度值来代替该点的灰度值。
中值滤波对于消除孤立点和线段的干扰十分有用, 对于一些细节较多的复杂图像,可以多次使用不同的中值滤波

核心函数为:dst = cv2.medianBlur(src, ksize)
src: 图像名称,ksize: 核大小。核必须是大于1的奇数,如3、5、7等。

python运行代码如下:

#为后面标题加入中文字体支持
from matplotlib.font_manager import FontProperties
font = FontProperties(fname=r"c:\windows\fonts\SimSun.ttc",size = 14)

#把BGR模式转换成RGB模式
img = cv2.cvtColor(im,cv2.COLOR_BGR2RGB)

# 均值滤波
img_mean = cv2.blur(img, (5,5)) #核大小是以(宽度,高度)表示的元祖形式:(5,5)

# 高斯滤波
img_Guassian = cv2.GaussianBlur(img,(5,5),0)

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

# 双边滤波
img_bilater = cv2.bilateralFilter(img,9,75,75)

# 展示不同的图片
titles = ['原图','均值滤波', '高斯滤波', '中值滤波', '中值滤波']
'bilateral']
imgs = [img, img_mean, img_Guassian, img_median, img_bilater]

for i in range(5):
    plt.subplot(2,3,i+1)  #注意,这和matlab中类似,没有0,数组下标从1开始
    plt.imshow(imgs[i])
    plt.title(titles[i], fontproperties= font)
    plt.xticks([]), plt.yticks([])
plt.show()

运行结果如下图所示:
python+opencv图像处理基础(三)————图像滤波方式_第5张图片
由上图可见,中值滤波对于去除椒盐噪声的处理效果最好.

以上文章参考博客:https://blog.csdn.net/qq_27261889/article/details/80822270

(by:dxz 2020 03 12 )

你可能感兴趣的:(opencv,计算机视觉,python)