IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 【OpenCV-Python】11.OpenCV的图像模糊 -> 正文阅读

[人工智能]【OpenCV-Python】11.OpenCV的图像模糊

11.OpenCV的图像模糊



前言

??图像模糊也称平滑处理,它主要处理图像中与周围差异较大的点,将其像素值调整为与周围点像素近似的值,其目的主要是消除图像噪声和边缘。


一、均值滤波

??均值滤波是指以当前点为中心,用其周围NN个像素点的平均值来代替代替当前点的像素值。用于计算平均值的NN个点称为邻域,用于滤波计算的卷积核大小与邻域相同。
在这里插入图片描述
??一个大小为3*3的邻域如图所示,则卷积核为:
在这里插入图片描述
??则中心点的均值滤波值=(125+129+130+134+253+127+125+133+131)÷9=143,143比253更接近周围的值。
??OpenCV的cv2.blur()函数用于实现均值滤波。

dst = cv2.blur(src, ksize [,anchor [,borderType]])

dst为滤波结果图像
src为原图像
ksize为卷积核大小, 表示为(width,height), width和height通常设置为相同值, 且为正数和奇数
anchor为锚点, 默认值为(-1,-1), 表示锚点位于卷积核中心
borderType为边界值处理方式
# 不同大小的卷积核执行均值滤波
img = cv2.imread('lena.jpg')
cv2.imshow('Lena',img)

img_blur_3 = cv2.blur(img, (3, 3))
cv2.imshow('Blur_3', img_blur_3)

img_blur_5 = cv2.blur(img, (5, 5))
cv2.imshow('Blur_5', img_blur_5)

img_blur_11 = cv2.blur(img, (11, 11))
cv2.imshow('Blur_11', img_blur_11)

img_blur_21 = cv2.blur(img, (21, 21))
cv2.imshow('Blur_21', img_blur_21)

cv2.waitKey(0)
cv2.destroyAllWindows()

在这里插入图片描述


二、高斯滤波

??高斯滤波与均值滤波略有不同,它按像素点与中心点的不同距离,赋予像素点不同的权重值,越靠近中心点权重值越大,越远离中心点权重值越小。根据权重值计算邻域内所有像素点的和,将和作为中心点的像素值。
??OpenCV的cv2.GaussianBlur()函数用于实现高斯滤波。

dst = cv2.GaussianBlur(src, ksize, sigmax [,sigmay [,borderType]])

sigmaX为水平方向上的权值值
sigmaY为垂直方向上的权值值

??如果sigmaY=0,则令其等于sigmaX;如果sigmaX和sigmaY均为0,则按照下面的公式计算其值。

sigmaX = 0.3 * ((width - 1) * 0.5 - 1) + 0.8
sigmaY = 0.3 * ((height - 1) * 0.5 - 1) + 0.8
# 不同大小的卷积核执行高斯滤波
img = cv2.imread('lena.jpg')
cv2.imshow('Lena',img)

img_GaussianBlur_3 = cv2.GaussianBlur(img, (3, 3), 0, 0)
cv2.imshow('GaussianBlur_3', img_GaussianBlur_3)

img_GaussianBlur_5 = cv2.GaussianBlur(img, (5, 5), 0, 0)
cv2.imshow('GaussianBlur_5', img_GaussianBlur_5)

img_GaussianBlur_11 = cv2.GaussianBlur(img, (11, 11), 0, 0)
cv2.imshow('GaussianBlur_11', img_GaussianBlur_11)

img_GaussianBlur_21 = cv2.GaussianBlur(img, (21, 21), 0, 0)
cv2.imshow('GaussianBlur_21', img_GaussianBlur_21)

cv2.waitKey(0)
cv2.destroyAllWindows()

在这里插入图片描述


三、方框滤波

??方框滤波以均值滤波为基础,可选择是否对滤波结果归一化处理。如果选择进行归一化,则滤波结果为邻域内点的像素值之和的平均值,否则滤波结果为像素值之和。
??OpenCV的 cv2.boxFilter()函数用于实现方框滤波。

dst = cv2.boxFilter(src, ddepth, ksize, [,anchor [,normalize [,borderType]]])

ddepth为目标图像的深度, 一般使用-1表示与原图像的深度一致
normalize为True(默认值)是执行归一化操作,False时不执行归一化操作
# 不同大小的卷积核执行方框滤波
img = cv2.imread('lena.jpg')
cv2.imshow('Lena',img)

img_boxFilter_3_T = cv2.boxFilter(img, -1, (3, 3), normalize = True)
cv2.imshow('boxFilter_3_T', img_boxFilter_3_T)

img_boxFilter_3_F = cv2.boxFilter(img, -1, (3, 3), normalize = False)
cv2.imshow('boxFilter_3_F', img_boxFilter_3_F)

img_boxFilter_11_T = cv2.boxFilter(img, -1, (5, 5), normalize = True)
cv2.imshow('boxFilter_5_T', img_boxFilter_5_T)


img_boxFilter_11_F = cv2.boxFilter(img, -1, (5, 5), normalize = False)
cv2.imshow('boxFilter_5_F', img_boxFilter_5_F)

cv2.waitKey(0)
cv2.destroyAllWindows()

在这里插入图片描述


四、中值滤波

??中值滤波将邻域内的所以像素值排序,取中间值作为邻域中心点的像素值。
??OpenCV的 cv2.medianBlur()函数用于实现中值滤波。

dst =  cv2.medianBlur(src, ksize)
# 不同大小的卷积核执行中值滤波
img = cv2.imread('lena.jpg')
cv2.imshow('Lena',img)

img_medianBlur_3 = cv2.medianBlur(img, 3)
cv2.imshow('medianBlur_3', img_medianBlur_3)

img_medianBlur_5 = cv2.medianBlur(img, 5)
cv2.imshow('medianBlur_5', img_medianBlur_5)

img_medianBlur_11 = cv2.medianBlur(img, 11)
cv2.imshow('medianBlur_11', img_medianBlur_11)

img_medianBlur_21 = cv2.medianBlur(img, 21)
cv2.imshow('medianBlur_21', img_medianBlur_21)

cv2.waitKey(0)
cv2.destroyAllWindows()

在这里插入图片描述


五、双边滤波

??双边滤波在计算像素值的同时会考虑距离和色差的信息,从而可在消除噪声的同时保护边缘信息。在执行双边滤波操作时,如果像素点与当前点色差较小,则赋予其较大的权重值,否则赋予其较小的权重值。
??OpenCV的cv2.bilateralFilter()函数用于实现双边滤波。

dst =  cv2.bilateralFilter(src, d, sigmaColor, sigmaSpace [,borderType])

d表示以当前点为中心的领域的直径, 一般为5
sigmaColor为双边滤波选择的色差范围
sigmaSpace为空间坐标中的sigma值, 值越大表示越多的像素点参与滤波计算,当d>0, 忽略sigmaSpace, 由d决定邻域大小; 否则d由sigmaSpace计算得出, 与sigmaSpace成比例
# 双边滤波
img = cv2.imread('lena.jpg')
cv2.imshow('Lena',img)

img_bilateralFilter = cv2.bilateralFilter(img, 5, 100, 100)
cv2.imshow('bilateralFilter', img_bilateralFilter)

cv2.waitKey(0)
cv2.destroyAllWindows()

在这里插入图片描述


六、2D滤波

??均值滤波、高斯滤波、方框滤波、中值滤波和双边滤波等可以通过参数来确定卷积核,2D卷积可使用自定义的卷积核来执行滤波操作。
??OpenCV的cv2.filter2D()函数用于实现2D滤波。

dst =  cv2.filter2D(src, ddepth, kernel [,anchor [,delta [,borderType]]])

ddepth为目标图像的深度, 一般使用-1表示与原图像的深度一致
kernel表示单通道卷积核(一维数组)
anchor表示图像处理的锚点
delta表示修正值, 未省略时, 将加上该值作为最终滤波的结果
borderType表示边界值处理方式
# 2D卷积
img = cv2.imread('lena.jpg')
cv2.imshow('Lena',img)

k1 = np.array([[3,3,3,3,3], [3,9,9,9,3], [3,11,12,13,3], [3,8,8,8,3],[3,3,3,3,3]]) / 25

k2 = np.ones((5,5),np.float32) / 25

img_1_2D = cv2.filter2D(img, -1, k1)
cv2.imshow('img_1_2D', img_1_2D)

img_2_2D = cv2.filter2D(img, -1, k2)
cv2.imshow('img_2_2D', img_2_2D)

cv2.waitKey(0)
cv2.destroyAllWindows()

在这里插入图片描述


# 总结 ??以上内容介绍了OpenCV-Python中图像模糊基本操作,有关Python、数据科学、人工智能等文章后续会不定期发布,请大家多多关注,一键三连哟(●’?’●)。
  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-12-11 15:43:23  更:2021-12-11 15:44:18 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 0:39:19-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码