当前位置: 首页 > backend >正文

【opencv-Python学习笔记(7):图像平滑处理】

目标:

1. 知道图像平滑的作用及应用场景

2. 这点知识也是很简单的

## 为什么需要图像平滑?

像素与周围像素差距很大,显得格格不入,就需要把这些像素点进行校正和剔除,从而让图像好看。


(1)均值滤波

含义:均值滤波是指用当前像素点周围N*M个像素值的均值来替代当像

原理:首先,我们对周围多少个像素取平均值,一般情况下,以当前单个像素为中心,对周围相同的行数和列数进行曲平均值。

计算方式:



卷积核:


函数dst = cv2.blur(src, ksize, anchor, borderType)

  • dst 是返回值,为进行均值滤波后得到的结果
  • src:输入图像(单通道或多通道),图像深度应该为CV_8U、CV_16U、CV_16S、CV_32F、CV_64F等等
  • ksize:卷积核大小(如(3,3)、(5,5),需为正奇数)
  • anchor:锚点,默认值为(-1,-1),表示当前计算均值的点位于核的中心位置
  • borderType:边界填充方式,决定以何种方式处理边界
  • 实例:
  • import  cv2img1 = cv2.imread("1.JPG")
    img2 = cv2.blur(img1,(3,3))
    cv2.namedWindow("11",cv2.WINDOW_NORMAL)
    cv2.namedWindow("12",cv2.WINDOW_NORMAL)
    cv2.imshow("11",img2)
    cv2.imshow("12",img1)
    cv2.waitKey()
    cv2.destroyAllWindows()
    

    结果:本次采用卷积核为3,因为图片是相机拍摄,本身就很高清。

(2)盒子滤波

解释:自由选择滤波结果是领域像素值之和的平均值,还是领域像素之和

函数:dst = cv2.boxFilter(src, ddepth, ksize, anchor, normalize, borderType)

参数:

  • dst:结果图像
  • src:输入图像,具有任意数量的通道数
  • ddepth:处理结果图像的图像深度,用-1来表示与输入图像具有相同的图像深度
  • anchor:锚点
  • normalize:是否是否进行归一化

注意:一般情况下,只需设置src, ddepth, ksize三个参数即可,其他的默认就行

实例:

import  cv2img1 = cv2.imread("1.JPG")
img2 = cv2.boxFilter(img1,-1,(3,3))
cv2.namedWindow("11",cv2.WINDOW_NORMAL)
cv2.namedWindow("12",cv2.WINDOW_NORMAL)
cv2.imshow("11",img2)
cv2.imshow("12",img1)
cv2.waitKey()
cv2.destroyAllWindows()

结果:

(3)高斯滤波

原理:高斯函数生成的卷积核进行滤波,权重随距离中心像素的距离增大而减小(符合正态分布),更贴合人眼对 “近邻像素影响更大” 的认知

效果:平滑效果比均值滤波更自然,对高斯噪声的抑制效果更好,边缘模糊程度较轻

函数:dst = cv2.GaussianBlur(src, ksize, sigmaX, sigmaY, borderType)

参数:

  • dst:滤波后图像
  • src:原始图像
  • ksize:滤波核大小,滤波核的值为基数
  • sigmaX:水平方向(X轴)标准差,其控制是权重的比例
  • sigmaY:是卷积核在垂直方向上(Y轴方向)的标准差。

但是高斯滤波的一般形式:dst = cv2.GaussianBlur(src, ksize, 0,0)

实例:

import  cv2img1 = cv2.imread("1.JPG")
img2 = cv2.GaussianBlur(img1,(3,3),0)
cv2.namedWindow("11",cv2.WINDOW_NORMAL)
cv2.namedWindow("12",cv2.WINDOW_NORMAL)
cv2.imshow("11",img2)
cv2.imshow("12",img1)
cv2.waitKey()
cv2.destroyAllWindows()

结果:

(4)中值滤波

含义:它是用邻域内所有像素值得中间来替代当前像素点的像素值

函数:dst = cv2.medianBlur(src, ksize)

参数:

  • dst:滤波处理后图像
  • src:输入图像
  • ksize:是滤波核大小,为一个整值,表示核的宽度和高度

实例:

import  cv2img1 = cv2.imread("1.JPG")
img2 = cv2.medianBlur(img1,3)
cv2.namedWindow("11",cv2.WINDOW_NORMAL)
cv2.namedWindow("12",cv2.WINDOW_NORMAL)
cv2.imshow("11",img2)
cv2.imshow("12",img1)
cv2.waitKey()
cv2.destroyAllWindows()

结果:

(5)双边滤波

解释:双边滤波是综合考虑空间信息和色彩信息的滤波方式,在过程中能有效的保护图像内的边缘信息

函数:dst = cv2.bilateralFilter(src, d, sigmaColor, sigmaSpace, borderType)

参数:

  • dst:返回值
  • src:原始图像
  • d:空间距离参数
  • sigmaColor:滤波时选取颜色差值范围,决定哪些像素点可以参与滤波中来
  • sigmaSpace:空间距离标准差(越大,影响范围越广)
  • borderType:边界样式

实例:

import  cv2img1 = cv2.imread("1.JPG")
img2 = cv2.bilateralFilter(img1,25,100,100)
cv2.namedWindow("11",cv2.WINDOW_NORMAL)
cv2.namedWindow("12",cv2.WINDOW_NORMAL)
cv2.imshow("11",img2)
cv2.imshow("12",img1)
cv2.waitKey()
cv2.destroyAllWindows()

结果:

http://www.xdnf.cn/news/18098.html

相关文章:

  • IntelliJ IDEA 开发配置教程
  • 独立看门狗(IWDG)
  • 决策树简单实战
  • 「数据获取」《防城港市统计年鉴》(2014-2020)(获取方式看绑定的资源)
  • 图像分类精度评价的方法——误差矩阵、总体精度、用户精度、生产者精度、Kappa 系数
  • 详细探讨AI在金融、医疗、教育和制造业四大领域的具体落地案例,并通过代码、流程图、Prompt示例和图表等方式展示这些应用的实际效果。
  • 一套GoldenGate → Kafka → Flink → MySQL 的端到端增量同步方案
  • IDE开发系列(1)基于QT的简易IDE框架设计
  • 3D检测笔记:基础坐标系与标注框介绍
  • 深层语义知识图谱:提升NLP文本预处理效果的关键技术
  • 【P18 3-10】OpenCV Python—— 鼠标控制,鼠标回调函数(鼠标移动、按下、。。。),鼠标绘制基本图形(直线、圆、矩形)
  • 在 PyCharm Notebook 中安装 YOLO
  • Jupyter 中实现交互式图表:ipywidgets 从入门到部署
  • 短剧小程序系统开发:推动短剧行业规范化与标准化发展
  • 01数据结构-交换排序
  • AWS Neptune:图数据库的强大潜力
  • Spring AI RAG 检索增强 应用
  • BPO(Business Process Optimization,业务流程优化)
  • 决策树(1)
  • 【领码课堂】AI写码不再“盲跑”,方案先行,自动化高效落地
  • 数据挖掘 3.5 支持向量机——边界和正则化
  • 深度理解分布式事务——强一致分布式事务解决方案
  • linux-高级IO(中)
  • LINUX 818 shell:random;for for
  • ReactNative开发实战——React Native开发环境配置指南
  • VS Code Copilot 完整使用教程(含图解)
  • LeetCode热题100--226. 翻转二叉树--简单
  • 我们为什么需要时序数据库?
  • Docker学习--认识Docker
  • 基于nvm安装管理多个node.js版本切换使用(附上详细安装使用图文教程+nvm命令大全)