python学opencv|读取图像(五十四)使用cv2.blur()函数实现图像像素均值处理

devtools/2025/2/8 17:55:11/

【1】引言

前序学习进程中,对图像的操作均基于各个像素点上的BGR值不同而展开。

对于彩色图像,每个像素点上的BGR值为三个整数,因为是三通道图像;对于灰度图像,各个像素上的BGR值是一个整数,因为这是单通道图像。

如果对这部分内容暂时回忆不起来,可以通过链接回忆:

pythonopencv|读取图像(九)用numpy创建黑白相间灰度图_numpy生成全黑图片-CSDN博客

pythonopencv|读取图像(十)用numpy创建彩色图像_cv2 通过numpy创建图像-CSDN博客

不过实际追溯下来,图像的大小确定后,像素就确定了,真正操作的都是像素点上的BGR值。

所以,在前序的图像叠加效果原理追溯中,获得叠加效果的根本原因都是因为各个函数执行了对BGR值的运算操作:

pythonopencv|读取图像(四十四)原理探究:bitwise_and()函数实现图像按位与运算-CSDN博客

按位计算过程是非常详细的图像叠加过程,如果只想对单张图像操作,有时候可以通过直接修改单张图像的BGR值实现图像调整。

本次文章就先从最简单的开始:通过调用cv2.blur()函数,把各个像素点的BGR值取平均值的方法,实现图像的色彩调整。

【2】官网教程

点击下方链接,直达cv2.blur()函数的官网页面:

OpenCV: Image Filtering

cv2.blur()函数的官网页面的解释为:

图1  cv2.blur()函数的官网页面

相应的,cv2.blur()函数的参数解释为:

void cv::blur     (    

        InputArray     src,                                   #输入图像
        OutputArray     dst,                                #输出图像
        Size     ksize,                                         #计算图像均值像素核大小
        Point     anchor = Point(-1,-1),               #图像像素核锚点,会自动计算,为可选参数
        int     borderType = BORDER_DEFAULT )   #可选参数,边界样式,为可选参数

【3】代码测试

首先是引入模块和图像:

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

然后对图像做均值计算:

python">#均值计算
src1 = cv.blur(srcm,(3,3))  # 图像取平均值,像素核大小为(3,3)
src2 = cv.blur(srcm,(5,5))  # 图像取平均值,像素核大小为(5,5)
src3 = cv.blur(srcm,(7,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.waitKey()  # 图像不关闭
cv.destroyAllWindows()  # 释放所有窗口

代码运行相关的图像有:

图2 初始图像srcx.png

图3 均值图像src1.png  像素核(3,3)

图4 均值图像src2.png  像素核(5,5)

图5 均值图像src3.png  像素核(7,7)

由图2到图5可见,随着像素核的增大,图像越来越模糊。这提醒我们,控制像素核的大小,可以进一步控制图像的模糊程度。

【4】细节说明

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

【5】总结

掌握了python+opencv实现调用cv2.blur()函数实现图像BGR值平均处理的技巧。

 

 


http://www.ppmy.cn/devtools/157142.html

相关文章

Spring boot整合quartz方法

目录 1.定时任务 1.quartz说明 2.Quartz提供了不同的数据存储策略以管理作业调度信息: 1.Quartz引入依赖 2.开发定时任务 (1)更新定时任务 (2)停止定时任务 (3)唤醒定时任务 &#xff…

Windows图形界面(GUI)-QT-C/C++ - QT Tab Widget

公开视频 -> 链接点击跳转公开课程博客首页 -> ​​​链接点击跳转博客主页 目录 一、概述 1.1 什么是 QTabWidget? 1.2 使用场景 二、常见样式 2.1 选项卡式界面 2.2 动态添加和删除选项卡 2.3 自定义选项卡标题和图标 三、属性设置 3.1 添加页面&…

CS 与 BS 架构的差异

在数字化的今天,选择软件架构模式对系统的性能、维护、安全和成本都有很大影响。BS架构和CS架构是最常见的两种模式,了解它们的区别和特点对开发人员和企业决策者都很重要。 CS架构最早出现,当时用户直接从主机获取数据。随着客户端和服务端…

LabVIEW与PLC交互

一、写法 写命令立即读出 写命令后立即读出,在同一时间不能有多个地方写入,因此需要在整个写入后读出过程加锁 项目中会存在多个循环并行执行该VI,轮询PLC指令 在锁内耗时,就是TCP读写的实际耗时为5-8ms,在主VI六个…

Java/Kotlin双语革命性ORM框架Jimmer(一)——介绍与简单使用

概览 Jimmer是一个Java/Kotlin双语框架 包含一个革命性的ORM 以此ORM为基础打造了一套综合性方案解决方案,包括 DTO语言 更全面更强大的缓存机制,以及高度自动化的缓存一致性 更强大客户端文档和代码生成能力,包括Jimmer独创的远程异常 …

尚硅谷spring框架视频教程——学习笔记二(数据库、事务、webflux)

目录 一、数据库操作二、事务操作1. 事务的四个特性2. 事务的底层逻辑3. 注意事项4. 启动事务操作5. 事务传播行为(propagation)6. 事务隔离级别7. 其他配置 三、Spring5新功能——webflux 一、数据库操作 spring框架使用JDBCTemplate对JDBC&#xff08…

华为支付-免密支付接入免密代扣说明

免密代扣包括支付并签约以及签约代扣场景。 开发者接入免密支付前需先申请开通签约代扣产品(即申请配置免密代扣模板及协议模板ID)。 华为支付以模板维度管理每一个代扣扣费服务,主要组成要素如下: 接入免密支付需注意&#x…

SQL条件分支中的大讲究

在SQL中,条件分支用于根据不同的条件执行不同的操作,适用于数据查询、数据更新以及存储过程等场景。合理使用SQL条件分支,可以优化数据操作流程,提高代码的可读性和可维护性。 目录 1. 逻辑判断的基本概念 2. CASE 语句&#xf…