python学opencv|读取图像(五十五)使用cv2.medianBlur()函数实现图像像素中值滤波处理

server/2025/2/4 5:22:10/

【1】引言

在前述学习过程中,已经探索了取平均值的形式进行图像滤波处理。

均值滤波的具体的执行对象是一个nXn的像素核,对这个像素核内所有像素点的BGR值取平均值,然后把这个平均的BGR值直接赋给像素核中心位置的核心像素点,由此实现图像滤波。

实质上,这让图像变得更加模糊。

相关文章链接为:

pythonopencv|读取图像(五十四)使用cv2.blur()函数实现图像像素均值处理-CSDN博客

既然有均值滤波,就会有中值滤波,这就是本次文章所要讲述的内容。

中值滤波调用的函数为:cv2.medianBlur()。

【2】官网教程

点击下方链接,直达cv2.medianBlur()函数的官网教程:OpenCV: Image Filtering

官网页面的解释为:

图1  cv2.medianBlur()函数的官网说明

官网对cv2.medianBlur()函数的参数解释为:

void cv::medianBlur     (    

        InputArray     src,               #输入图像
        OutputArray     dst,            #输出图像
        int     ksize )                       #像素核大小

【3】代码测试

首先是引入模块和初始图像:

python">import cv2 as cv  # 引入CV模块# 读取图片
srcm = cv.imread('srcx.png')  # 读取图像srcx.png

然后进行中值滤波操作:

python">#滤波计算
src1 = cv.medianBlur(srcm,3)  # 图像取平均值,像素核大小为(3,3)
src2 = cv.medianBlur(srcm,5)  # 图像取平均值,像素核大小为(5,5)
src3 = cv.medianBlur(srcm,7)  # 图像取平均值,像素核大小为(7,7)

之后显示和保存图像:

python"># 显示结果
cv.imshow('srcm ', srcm)
cv.imshow('src1 ', src1)
cv.imshow('src2 ', src2)
cv.imshow('src3 ', src3)
cv.imwrite('src1.png',src1)
cv.imwrite('src2.png',src2)
cv.imwrite('src3.png',src3)
# 窗口控制
cv.waitKey()  # 图像不关闭
cv.destroyAllWindows()  # 释放所有窗口

代码运行相关的图像有:

图2 初始图像srcx.png

图3 中值滤波图像src1.png

图4 中值滤波图像src2.png

图5 中值滤波图像src3.png

和调用cv2.blur()函数使用均值滤波处理一样,调用cv2.medianBlur()函数进行中值滤波处理后,由图2到图5可见,随着像素核的增大,图像越来越模糊。这提醒我们,控制像素核的大小,可以进一步控制图像的模糊程度。

【4】细节说明

和调用cv2.blur()函数使用均值滤波处理不同,cv2.blur()函数需要给出(nXn)大小的像素核,调用cv2.medianBlur()函数进行中值滤波处理使用的像素核只需要写出边长n,但这个边长也应该是奇数,cv2.medianBlur()函数会自动根据这个边长划定一个正方形的像素核。

像素核使用奇数大小会比较好,因为奇数大小会在最中间围成一个方格,这个方格就是核心方格,中值计算的值直接赋给这个核心方格。

图6 滤波方式对比

【5】总结

掌握了使用python+opencv实现调用cv2.medianBlur()函数进行中值滤波处理图像的技巧。

 


http://www.ppmy.cn/server/164807.html

相关文章

OpenCV:图像轮廓

目录 简述 1. 什么是图像轮廓? 2. 查找图像轮廓 2.1 接口定义 2.2 参数说明 2.3 代码示例 2.4 运行结果 3. 绘制图像轮廓 3.1 接口定义 3.2 参数说明 3.3 代码示例 3.4 运行结果 4. 计算轮廓周长 5. 计算轮廓面积 6. 示例:计算图像轮廓的面…

TensorFlow 示例摄氏度到华氏度的转换(一)

TensorFlow 实现神经网络模型来进行摄氏度到华氏度的转换,可以将其作为一个回归问题来处理。我们可以通过神经网络来拟合这个简单的转换公式。 1. 数据准备与预处理 2. 构建模型 3. 编译模型 4. 训练模型 5. 评估模型 6. 模型应用与预测 7. 保存与加载模型 …

DeepSeek学术写作测评第一弹:论文润色,中译英效果如何?

我是娜姐 迪娜学姐 ,一个SCI医学期刊编辑,探索用AI工具提效论文写作和发表。 最近风很大的DeepSeek,持续火出圈,引起了硅谷AI圈的热议。很多学员让娜姐测评一下对于平时需要学术写作润色的论文党,效果究竟怎么样&…

【llm对话系统】大模型源码分析之 LLaMA 模型的 Masked Attention

在大型语言模型(LLM)中,注意力机制(Attention Mechanism)是核心组成部分。然而,在自回归(autoregressive)模型中,例如 LLaMA,我们需要对注意力进行屏蔽&#…

跨境数据传输问题常见解决方式

在全球化经济的浪潮下,跨境数据传输已然成为企业日常运营的关键环节。随着数字贸易的蓬勃发展和跨国业务的持续扩张,企业在跨境数据处理方面遭遇了诸多棘手难题。那么,面对这些常见问题,企业该如何应对?镭速跨境数据传…

初级数据结构:栈和队列

目录 一、栈 (一)、栈的定义 (二)、栈的功能 (三)、栈的实现 1.栈的初始化 2.动态扩容 3.压栈操作 4.出栈操作 5.获取栈顶元素 6.获取栈顶元素的有效个数 7.检查栈是否为空 8.栈的销毁 9.完整代码 二、队列 (一)、队列的定义 (二)、队列的功能 (三&#xff09…

队列—学习

1. 手写队列的实现 使用数组实现队列是一种常见的方法。队列的基本操作包括入队(enqueue)和出队(dequeue)。队列的头部和尾部分别用 head 和 tail 指针表示。 代码实现 const int N 10000; // 定义队列容量,确保够…

为什么LabVIEW适合软硬件结合的项目?

LabVIEW是一种基于图形化编程的开发平台,广泛应用于软硬件结合的项目中。其强大的硬件接口支持、实时数据采集能力、并行处理能力和直观的用户界面,使得它成为工业控制、仪器仪表、自动化测试等领域中软硬件系统集成的理想选择。LabVIEW的设计哲学强调模…