opencv基础-34 图像平滑处理-2D 卷积 cv2.filter2D()

2D卷积是一种图像处理和计算机视觉中常用的操作,用于在图像上应用滤波器或卷积核,从而对图像进行特征提取、平滑处理或边缘检测等操作。

在2D卷积中,图像和卷积核都是二维的矩阵或数组。卷积操作将卷积核在图像上滑动,对每个局部区域进行元素级别的乘法和累加操作,得到输出图像的对应位置的像素值。

OpenCV 提供了多种滤波方式,来实现平滑图像的效果,例如均值滤波、方框滤波、高斯滤波、中值滤波等。大多数滤波方式所使用的卷积核都具有一定的灵活性,能够方便地设置卷积核的大小和数值。但是,我们有时希望使用特定的卷积核实现卷积操作,例如使用如下卷积核进行卷积操作。

在这里插入图片描述
前面介绍过的滤波函数都无法将卷积核确定为上述形式,这时要使用 OpenCV 的自定义卷积函数。
在 OpenCV 中,允许用户自定义卷积核实现卷积操作,使用自定义卷积核实现卷积操作的函数是 cv2.filter2D(),其语法格式为:

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

式中:

  1. dst 是返回值,表示进行方框滤波后得到的处理结果。
  2. src 是需要处理的图像,即原始图像。它能够有任意数量的通道,并能对各个通道独立
    处理。图像深度应该是 CV_8U、CV_16U、CV_16S、CV_32F 或者 CV_64F 中的一种。
  3. ddepth 是处理结果图像的图像深度,一般使用-1 表示与原始图像使用相同的图像深度。
  4. kernel 是卷积核,是一个单通道的数组。如果想在处理彩色图像时,让每个通道使用不同的核,则必须将彩色图像分解后使用不同的核完成操作。
  5. anchor 是锚点,其默认值是(-1, -1),表示当前计算均值的点位于核的中心点位置。该值使用默认值即可,在特殊情况下可以指定不同的点作为锚点。
  6. delta 是修正值,它是可选项。如果该值存在,会在基础滤波的结果上加上该值作为最终的滤波处理结果。
  7. borderType 是边界样式,该值决定了以何种情况处理边界,通常使用默认值即可。

在通常情况下,使用滤波函数 cv2.filter2D()时,对于参数锚点 anchor、修正值 delta、边界样式 borderType,直接采用其默认值即可。因此,函数 cv2.filter2D()的常用形式为:

dst = cv2.filter2D( src, ddepth, kernel )

示例:

自定义一个卷积核,通过函数 cv2.filter2D()应用该卷积核对图像进行滤波操作,并显示滤波结果。

设计一个 9×9 大小的卷积核,让卷积核内所有权重值相等,如下所示:

在这里插入图片描述
借助 numpy 库中的 ones()函数即可创建该卷积核,具体的语句为:

kernel = np.ones((9,9),np.float32)/81

综上所述,程序设计代码如下:

import cv2
import numpy as np
o=cv2.imread("lena.png")
kernel = np.ones((9,9),np.float32)/81
r = cv2.filter2D(o,-1,kernel)
cv2.imshow("original",o)
cv2.imshow("Gaussian",r)
cv2.waitKey()
cv2.destroyAllWindows()

运行结果
在这里插入z图片描述
当然,本例中使用的卷积核比较简单,该滤波操作与直接使用均值滤波语句“r=cv2.blur(o,(5,5))”的效果是一样的。在实际应用中,可以定义更复杂的卷积核实现自定义滤波操作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/57733.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Grafana V10 告警推送 邮件

最近项目建设完成,一个城域网项目,相关zabbix和grafana展示已经完,想了想,不想天天看平台去盯网络监控平台,索性对告警进行分类调整,增加告警的推送,和相关部门的提醒,其他部门看不懂…

yaml文件详解

目录 一、yaml的简介 二、yaml示例 1.编写yaml文件创建pod资源 2. 创建资源对象 3.查看创建的pod资源 4.创建service服务对外提供访问并测试 5.创建资源对象 6.查看创建的service 7.在浏览器输入 nodeIP:nodePort 即可访问 三、 获取yaml配置资源 四、将现有资源生成模…

Xcode升级导致关联库报错

想办法找到对应的库 然后到 Build Phases -- LinkBinary With Libraries中点击,选择对应的framework即可,就像我工程的报错 Undefined symbol: _OBJC_CLASS_$_ADClient _OBJC_CLASS_$_ASIdentifierManager 缺失的库是AdSupport.framework 添加后再次编…

在钡铼技术ARM嵌入式控制器上安装Node-RED的详细步骤

嵌入式ARM控制器BL301/BL302系列是工业级坚固型工业控制器,采用NXP的高性能处理器I.MX6ULL,搭配先进的ARM Cortex-A7构架,运行速度高达800MHz,具有高度的稳定性。本产品最高可提供4路RS485/RS232,1路CAN口,…

Linux系统中redis基础

本节主要学习redis的概述,安装目录结构,命令解析和redis登录更改,数据库的操作,和redis的持久化。 目录 一、概述 二、安装 1.编译安装 2.rpm安装 三、目录结构 四、命令解析 五、redis登陆更改 问题 解决办法 六、数据…

CSS实现图像填充文字

效果如下 具体代码&#xff1a; <!DOCTYPE html> <html><head><meta charset"utf-8"><title>CSS图像填充文字</title><style>.text {background-image: url(./imgs/1.webp);/* 一定要让背景透明&#xff0c;这样后面的背…

Qt小项目贪吃蛇实线,主要掌握定时器、信号与槽、按键事件、绘制事件、坐标运算、随机数生成等

Qt小项目贪吃蛇实线&#xff0c;主要掌握定时器、信号与槽、按键事件、绘制事件、坐标运算、随机数生成等 Qt 贪吃蛇演示QWidget 绘制界面项目源文件 注释清晰widget.hwidget.cpp 拓展QTimerQKeyEventQRectFQPointFQPainterQIcon Qt 贪吃蛇演示 QWidget 绘制界面 项目源文件 注…

2023集成电路产业发展与产教融合高峰论坛会议顺利举行

8月5日&#xff0c;由中国半导体行业协会和市政府共同主办&#xff0c;天水师范学院、天水华天科技股份有限公司、杭州加速科技有限公司承办的2023集成电路产业发展与产教融合高峰论坛在天水举行。天水市委书记冯文戈&#xff0c;教育部学生服务与素质发展中心副主任方伟&#…

4 三组例子,用OpenCV玩转图像-AI-python

读取&#xff0c;缩放&#xff0c;旋转&#xff0c;写入图像 首先导入包&#xff0c;为了显示导入matplotlib/为了在matplotlib显示 导入CV2/查看版本 导入图片/查看图片类型 图片数组 数组大小 对于opencv通道顺序蓝色B、绿色G、红色R matplotlib通道顺序为 红色R、绿色G、蓝…

云原生K8S------Yaml文件详解

目录 一&#xff1a;K8S支持的文件格式 1&#xff0c;yaml和json的主要区别 2&#xff0c;YAML语言格式 二&#xff1a;yuml 1、查看 api 资源版本标签 2、写一个yaml文件demo 3、创建service服务对外提供访问并测试 4、详解k8s中的port 三&#xff1a;文件生成 1、kubec…

Stephen Wolfram:ChatGPT 的训练

The Training of ChatGPT ChatGPT 的训练 OK, so we’ve now given an outline of how ChatGPT works once it’s set up. But how did it get set up? How were all those 175 billion weights in its neural net determined? Basically they’re the result of very large…

以指标驱动,保险、零售、制造企业开启精益敏捷运营的新范式

近日&#xff0c;以“释放数智生产力”为主题的 Kyligence 用户大会在上海前滩香格里拉大酒店成功举行。大会包含上午的主论坛和下午的 4 场平行论坛&#xff0c;并举办了闭门会议、Open Day 等活动。来自金融、零售、制造、医药等行业的客户及合作伙伴带来了超过 23 场主题演讲…