opencv图像处理进阶——图像平滑

opencv图像处理进阶——图像平滑,第1张

opencv图像处理进阶——图像平滑

参考文献:​​​​​​Python+OpenCV图像处理(一篇全)_E_vens-CSDN博客_基于python的opencv图像处理

图像平滑是一种区域增强算法,对图像进行一定的增强处理以减小噪声等带来的影响。

1、均值滤波 cv2.blur(image,(k,k))

任一点的像素值,都是周围N*M个像素值的均值。

核越大,图像越模糊,核大小为(1,1)时,表示原图

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

img = cv2.imread('F:\lovergos\OpenCV\Image27.jpg')  # 原图
img = cv2.resize(img,None,fx=0.2,fy=0.2)  # 图片太大,将其缩小,可省略

# 均值滤波
img1 = cv2.blur(img,(1,1))
img2 = cv2.blur(img,(50,50))
img3 = cv2.blur(img,(100,100))

img_names = ['origin','(1,1)','(50,50)','(100,100)']
images = [img,img1,img2,img3]
for i in range(4):
    plt.subplot(2,2,i+1)
    plt.imshow(images[i],'gray')
    plt.title(img_names[i])
    plt.xticks([])
    plt.yticks([])
plt.show()

处理效果对比:

 2、中值滤波 cv2.medianBlur(src,ksize)

该点周围的像素点(包括本身),按次序排列,取中位数作为点的像素值。

注意:核必须是奇数;核越大,图片越模糊;相比于均值滤波,cv2.medianBlur(src,ksize)中ksize只需要填写一个数字即可。

img = cv2.imread('F:\lovergos\OpenCV\Image27.jpg')  # 原图
img = cv2.resize(img,None,fx=0.2,fy=0.2)  # 图片太大,将其缩小,可省略

# 中值滤波
img1 = cv2.medianBlur(img,1)
img2 = cv2.medianBlur(img,45)
img3 = cv2.medianBlur(img,101)

img_names = ['origin','(1,1)','(45,45)','(101,101)']
images = [img,img1,img2,img3]
for i in range(4):
    plt.subplot(2,2,i+1)
    plt.imshow(images[i],'gray')
    plt.title(img_names[i])
    plt.xticks([])
    plt.yticks([])
plt.show()

处理效果对比:

3、高斯滤波 cv2.GassianBlur(src,ksize,sigmaX)

高斯平滑对图像进行平均时,不同位置的像素被赋予了不同的权重。高斯滤波让临近的像素具有更高的重要度,对周围像素计算加权平均值,较近的像素具有较大的权重。sigmaX为x方向方差,主要用来控制权重。

首先对原图添加椒盐噪声:

def salt_noise(origin_img,num):
    '''
    :param origin_img: 原图
    :param num: 添加噪声点的量
    :return: noise_img
    '''
    height,width = origin_img.shape[0],origin_img.shape[1]  # 获取高和宽的像素值
    for i in range(num):
        h = random.randint(0,height-1)
        w = random.randint(0,width-1)
        if random.randint(0,1) == 0:
            origin_img[h,w] = 0
        else:
            origin_img[h,w] = 255
    return origin_img


origin_img = cv2.imread('F:\lovergos\OpenCV\Image27.jpg')  # 原图
origin_img = cv2.resize(origin_img,None,fx=0.2,fy=0.2)
img_noise = salt_noise(origin_img,100000)

添加噪声后的图像为:

 采用不同的ksize及sigmax对噪声图像进行高斯平滑处理:

# 高斯平滑处理带噪声的图
img_gassian1 = cv2.GaussianBlur(img_noise,(5,5),0)
img_gassian2 = cv2.GaussianBlur(img_noise,(15,15),0)
img_gassian3 = cv2.GaussianBlur(img_noise,(5,5),10)

cv2.imshow('img_gassian1',img_gassian1)
cv2.imshow('img_gassian2',img_gassian2)
cv2.imshow('img_gassian3',img_gassian3)
cv2.waitKey(0)

# img_names = ['img_noise','img_gassian1','img_gassian2','img_gassian3']
# images = [img_noise,img_gassian1,img_gassian2,img_gassian3]
# for i in range(4):
#     plt.subplot(2,2,i+1)
#     plt.imshow(images[i],'gray')
#     plt.title(img_names[i])
#     plt.xticks([])
#     plt.yticks([])
# plt.show()

处理效果:

 

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5625346.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-15
下一篇 2022-12-15

发表评论

登录后才能评论

评论列表(0条)

保存