python+opencv图像处理之六:图像平滑处理

python+opencv图像处理之六:图像平滑处理

一、图像平滑

图像平滑是指受传感器和外界因素的影响,图像上会出现某些亮度变化过大的区域,或出现一些亮点(也称噪声)。这种为了抑制噪声,使图像亮度趋于平缓的处理方法就是图像平滑。平滑过程会导致图像边缘模糊化。
本文主要讲解:均值滤波、中值滤波、方框滤波和高斯滤波四种opencv提供的图像平滑处理方法

此次实验中我们先给我们的图片随机增加噪声:
图像增加噪声程序代码如下:

# -*- coding:utf-8 -*-
import cv2
import numpy as np

#读取图片
img = cv2.imread("test.jpg", cv2.IMREAD_UNCHANGED)

#获取图片的行列数
rows, cols = img.shape[0:2]

#加噪声
for i in range(5000):    
    x = np.random.randint(0, rows) 
    y = np.random.randint(0, cols)    
    img[x,y,:] = 255

#显示图片
cv2.imshow("noise", img)

#保存图片
cv2.imwrite("test1.jpg",img)
           
#等待显示
cv2.waitKey(0)
cv2.destroyAllWindows()

图像经过增加噪声之后效果如下(加的噪声为白色像素点):
在这里插入图片描述

二、均值滤波

均值滤波是典型的线性滤波算法,其采用的主要方法为邻域平均法。它是指在图像上对目标像素给一个模板,该模板包括了其周围的临近像素(以目标像素为中心的周围8个像素,构成一个滤波模板,即包括目标像素本身),再用模板中的全体像素的平均值来代替原来像素值。
浅蓝色点像素值= 1 9 \frac{1}{9} 91*(绿色与浅蓝色区域像素总和)
在这里插入图片描述
均值滤波参考程序代码如下:

#encoding:utf-8
import cv2  
import numpy as np  
import matplotlib.pyplot as plt
 
#读取图片
img = cv2.imread('test1.jpg')
source = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
 
#均值滤波
result = cv2.blur(source, (5,5))
 
#显示图像
titles = ['Source Image', 'Blur Image']  
images = [source, result]  
for i in xrange(2):  
   plt.subplot(1,2,i+1), plt.imshow(images[i], 'gray')  
   plt.title(titles[i])  
   plt.xticks([]),plt.yticks([])  
plt.show()  

图片处理结果如下:
在这里插入图片描述
在均值滤波处理函数cv2.blur(原始图像,核大小)中,可以通过修改核大小去更改图片处理效果;常用的均值滤波处理核大小为(3,3)和(5,5)

三、中值滤波

中值滤波法是一种非线性平滑技术,它将每一像素点的灰度值设置为该点某邻域窗口内的所有像素点灰度值的中值.
中值滤波是基于排序统计理论的一种能有效抑制噪声的非线性信号处理技术,中值滤波的基本原理是把数字图像或数字序列中一点的值用该点的一个邻域中各点值的中值代替,让周围的像素值接近的真实值,从而消除孤立的噪声点。方法是用某种结构的二维滑动模板,将板内像素按照像素值的大小进行排序,生成单调上升(或下降)的为二维数据序列。
在这里插入图片描述
中值滤波处理参考程序代码如下:

#encoding:utf-8
import cv2  
import numpy as np  
import matplotlib.pyplot as plt
 
#读取图片
img = cv2.imread('test1.jpg')
 
#中值滤波
result = cv2.medianBlur(img, 3)

#显示图形
titles = ['Source Image', 'middle Image']  
images = [source, result]  
for i in xrange(2):  
   plt.subplot(1,2,i+1), plt.imshow(images[i], 'gray')  
   plt.title(titles[i])  
   plt.xticks([]),plt.yticks([])  
plt.show()  

中值滤波图像处理结果如下:
在这里插入图片描述

四、方框滤波

方框滤波和均值滤波核基本一致,区别是需不需要均一化处理。
opencv中提供的方框滤波函数为: cv2.boxFilter(原始图像, 目标图像深度, 核大小, normalize属性)
normalize=1时,表示进行归一化处理,此时图片处理效果与均值滤波相同
如果normalize=0时,表示不进行归一化处理,像素值为周围像素之和,图像更多为白色
方框滤波参考程序代码如下:

#encoding:utf-8
import cv2  
import numpy as np  
import matplotlib.pyplot as plt
 
#读取图片
img = cv2.imread('test1.jpg')
 
#方框滤波
result = cv2.boxFilter(source, -1, (5,5), normalize=1)

#显示图形
titles = ['Source Image', 'BoxFilter Image']  
images = [source, result]  
for i in xrange(2):  
   plt.subplot(1,2,i+1), plt.imshow(images[i], 'gray')  
   plt.title(titles[i])  
   plt.xticks([]),plt.yticks([])  
plt.show()  

程序图像处理结果如下:
normalize=1,进行归一化处理,图像处理结果与均值滤波相同
在这里插入图片描述
normalize=0,不进行归一化处理,图像处理结果中,多数像素点为白色
在这里插入图片描述

五、高斯滤波

高斯滤波是一种线性平滑滤波,适用于消除高斯噪声,广泛应用于图像处理的减噪过程。 通俗的讲,高斯滤波就是对整幅图像进行加权平均的过程,每一个像素点的值,都由其本身和邻域内的其他像素值经过加权平均后得到。高斯滤波的具体操作是:用一个模板(或称卷积、掩模)扫描图像中的每一个像素,用模板确定的邻域内像素的加权平均灰度值去替代模板中心像素点的值。
33高斯模板:
在这里插入图片描述
5
5高斯模板:
在这里插入图片描述
高斯滤波参考程序代码如下:

#encoding:utf-8
import cv2  
import numpy as np  
import matplotlib.pyplot as plt
 
#读取图片
img = cv2.imread('test1.jpg')
source = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
 
#高斯滤波
result = cv2.GaussianBlur(source, (3,3), 0)

#显示图形
titles = ['Source Image', 'GaussianBlur Image']  
images = [source, result]  
for i in xrange(2):  
   plt.subplot(1,2,i+1), plt.imshow(images[i], 'gray')  
   plt.title(titles[i])  
   plt.xticks([]),plt.yticks([])  
plt.show()  

高斯滤波图像处理结果如下:
33高斯模板处理结果:
在这里插入图片描述
5
5高斯模板处理结果:
在这里插入图片描述

  • 4
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 好的,关于利用Python OpenCV实现照片的预处理,我可以给您一些简单的介绍。高斯平滑滤波通常被用来去除噪点,提高对比度可以通过调整图像的亮度、饱和度等来实现。灰度变换可以将彩色图像转换为黑白图像,二值化处理则可以将图像转换为只有两种颜色的图像。如果您需要详细的教程和代码实现,建议您在搜索引擎上查找相关内容,会有更全面的资料供您参考。 ### 回答2: 照片的预处理图像处理中非常重要的一步,可以有效地提升后续算法的准确性和性能。利用Python OpenCV库可以方便地实现照片的预处理。 高斯平滑滤波是一种常用的图像平滑方法,可以去除图像中的噪声。通过使用OpenCV的GaussianBlur函数,可以将图像进行高斯平滑滤波处理。 提高对比度是调整图像亮度分布,使得图像更加清晰明亮的一种方法。可以使用OpenCV的convertTo函数来进行对比度调整。 灰度变换是将彩色图像转化为灰度图像的处理过程。通过使用OpenCVcvtColor函数,可以将彩色图像转换为灰度图像。 二值化处理是将灰度图像转化为二值图像的处理过程。通过使用OpenCV的threshold函数,可以根据设置的阈值将灰度图像进行二值化处理。 综上所述,利用Python OpenCV实现照片的预处理可以按照以下步骤进行: 1. 首先使用GaussianBlur函数对图像进行高斯平滑滤波处理,去除图像中的噪声。 2. 然后使用convertTo函数调整图像对比度,使得图像更加清晰明亮。 3. 接着使用cvtColor函数将彩色图像转换为灰度图像。 4. 最后使用threshold函数对灰度图像进行二值化处理,得到二值图像。 通过上述步骤的处理,可以有效地对照片进行预处理,提取出目标信息,为后续的图像算法提供清晰的输入。 ### 回答3: Python OpenCV是一个Python编程语言的开源计算机视觉库,可以用于图像处理计算机视觉任务。以下是使用Python OpenCV实现照片预处理的一些常见方法: 1. 高斯平滑滤波:高斯平滑滤波是一种常见的图像平滑处理方法,可以去除图像中的噪声。可以使用OpenCV的GaussianBlur函数来实现高斯平滑滤波。通过调整滤波器的大小和标准差参数,可以控制平滑的程度。 2. 提高对比度:提高图像对比度可以使图像更饱满和清晰。可以使用OpenCV的equalizeHist函数来实现直方图均衡化,该函数将图像的像素值拉伸到0到255之间,从而增加图像的对比度。 3. 灰度变换:将彩色图像转换为灰度图像是图像处理中常见的一步。可以使用OpenCVcvtColor函数将彩色图像转换为灰度图像。灰度图像只有一个通道,每个像素的值表示亮度。 4. 二值化处理:二值化处理将图像分割为黑白两个部分,可以用于图像分割和图像识别任务。可以使用OpenCV的threshold函数来实现图像二值化处理,该函数将图像像素值大于阈值的像素设为白色,小于等于阈值的像素设为黑色。阈值的选择可以根据具体情况调整。 要实现这些预处理步骤,首先需要安装Python OpenCV库。然后,读取图像文件,并依次使用上述函数来进行预处理。最后,可以保存预处理后的图像文件或在展示图像时使用。通过调整参数和多种方法的组合,可以获得不同的预处理效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值