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

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

【1】引言

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

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

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

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

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

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

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

python学opencv|读取图像(四十四)原理探究: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】代码测试

首先是引入模块和图像:

import cv2 as cv  # 引入CV模块

# 读取图片
srcm = cv.imread('srcx.png')  # 读取图像srcx.png

然后对图像做均值计算:

#均值计算
src1 = cv.blur(srcm,(3,3))  # 图像取平均值,像素核大小为(3,3)
src2 = cv.blur(srcm,(5,5))  # 图像取平均值,像素核大小为(5,5)
src3 = cv.blur(srcm,(7,7))  # 图像取平均值,像素核大小为(7,7)

然后显示和保存图像:

# 显示结果
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.kler.cn/a/529488.html

相关文章:

  • C#面向对象(封装)
  • LeetCode:494.目标和
  • Dijkstra算法解析
  • 【算法设计与分析】实验8:分支限界—TSP问题
  • Koa 基础篇(二)—— 路由与中间件
  • 对顾客行为的数据分析:融入2+1链动模式、AI智能名片与S2B2C商城小程序的新视角
  • C++ 泛型编程指南02 (模板参数的类型推导)
  • 【Block总结】门控轴向注意力Gated Axial-Attention|即插即用
  • 代码练习2.3
  • 为何 git 默认是 master分支,而github默认是main分支(DeepSeek问答)
  • MiniMax:人工智能领域的创新先锋
  • git安装flutter
  • 【含文档+PPT+源码】基于微信小程序的校园快递平台
  • SpringBoot 整合 SpringMVC:SpringMVC的注解管理
  • 封装 JDK 自带的 HttpServer
  • 笔记:电机系统性能标定测试怎么进行?
  • 【Go - 小心! Go中slice的传递陷阱 】
  • 第七篇:数据库备份与恢复
  • UE5 蓝图学习计划 - Day 10:UI 系统(HUD 与 Widget)
  • Web - CSS3基础语法与盒模型
  • python爬虫从0到1 - Scrapy框架的实战应用
  • 蓝桥杯备考:模拟算法之字符串展开
  • ubuntu22.04防火墙策略
  • VSCode设置颜色主题
  • 实体类实现Serializable接口
  • PyCharm中使用Ollama安装和应用Deepseek R1模型:完整指南