opencv_c++学习(十六)

一、线性滤波

均值滤波:
在这里插入图片描述

blur(InputArray src, utputArray dst,Size ksize, Point anchor = Point(-i,-1), int borderType = BoRDER_DEFAULT)

src:待均值滤波的图像,图像的数据类型必须是CV_8U、CV_16U、CV_16S、CV_32F和CV_64F这五种数据类型之一。
dst:均值滤波后的图像,与输入图像具有相同的尺寸和数据类型。
ksize:卷积核尺寸。
anchor:内核的基准点(锚点),其默认值为(-1,-1)代表内核基准点位于kernel的中心位置。
borderType:像素外推法选择标志。

方框滤波:

boxFilter(InputArray src, outputArray dst, int ddepth, Size ksize, Point anchor = Point(-1,-1), bool normalize = true, int borderType = BORDER__DEFAULT)

src:输入图像。
dst:输出图像,与输入图像具有相同的尺寸和通道数。
ddepth:输出图像的数据类型(深度),根据输入图像的数据类型不同拥有不同的取值范围。
ksize:卷积核尺寸。
anchor:内核的基准点(锚点),其默认值为(-1,-1)代表内核基准点位于kernel的中心位置。
normalize:是否将卷积核进行归一化的标志,默认参数为true,表示进行归一化。
borderType:像素外推法选择标志。

高斯滤波:
在这里插入图片描述

GaussianBlur(InputArray src, outputArray dst, Size ksize, double sligmax, double sigmaY = 0, int borderType = eORDER_DEFAULT

src:待高斯滤波图像,数据类型必须为CV_8U,CV_16U,CV_16S,cV_32F或CV_64F。
dst:输出图像,与输入图像src具有相同的尺步、通道数和数据类型。
ksize:高斯滤波器的尺寸,滤波器可以不为正方形,但是必须是正奇数。如果尺寸为0,则由标准偏差计算尺寸。
sigmaX:X方向的高斯滤波器标准偏差。
sigmaY:Y方向的高斯滤波器标准偏差;如果输入量为0,则将其设置为等于sigmaX,如果两个轴的标准差均为0,则根据输入的高斯滤波器尺寸计算标准偏差。
borderType:像素外推法选择标志。

使用案例如下:

int main() {

	//读取图片
	Mat src = imread("1.png");
	if (src.empty())
	{
		printf("不能打开空图片");
		return -1;
	}

	//设定一个滤波后结果的Mat类
	Mat result;

	//调用均值滤波函数进行滤波,滤波器核大小为3*3
	blur(src, result, Size(3, 3));

	//展示图片
	imshow("jun", result);

	//方框滤波
	Mat result_box;

	//开始方框滤波,核大小为3*3,不进行归一化
	boxFilter(src, result_box, -1, Size(3, 3), Point(-1, -1), false);

	//展示图片
	imshow("fang", result_box);

	//高斯滤波
	Mat result_gaussian;

	//开始高斯滤波,核大小为3*3
	GaussianBlur(src, result_gaussian, Size(3, 3), 10, 20);

	//展示图片
	imshow("gaosi", result_gaussian);

	waitKey(0);
	return 0;
}

二、非线性滤波——中值滤波

在这里插入图片描述

medianBlur(lnputArraysrc, OutputArray dst, int ksize

src:待中值滤波的图像,可以是单通道,三通道和四通道,数据类型与滤波器的尺寸相关,当滤波器尺寸为3或5时,图像可以是CV_8U,CV_16U或CV_32F类型,对于较大尺寸的滤波器,数据类型只能是CV_8U。
dst:输出图像,与输入图像src具有相同的尺寸和数据类型。
ksize:滤波器尺寸,必须是大于1的奇数,例如: 3、5、7…
使用案例如下:

int main() {

	//读取图片
	Mat src = imread("1.png", IMREAD_ANYCOLOR);
	if (src.empty())
	{
		printf("不能打开空图片");
		return -1;
	}

	//设定一个滤波后结果的Mat类
	Mat result;

	//进行尺寸为3的中值滤波
	medianBlur(src, result, 3);

	//展示图片
	imshow("中值", result);

	waitKey(0);
	return 0;
}

三、可分离滤波

在这里插入图片描述

sepFilter2D(lnputArray src, outputArray dst,int ddepth, lnputArray kernelX, lnputArray kernelY, Point anchor = Point(-1,-1), double delta = 0, int borderType = BORDER_DEFAULT

src:待滤波图像。
dst:输出图像,与输入图像src具有相同的尺寸、通道数和数据类型。ddepth:输出图像的数据类型(深度)。
kernelX:X方向的滤波器。
kernelY: Y方向的滤波器。
anchor:内核的基准点(锚点),其默认值为(-1,-1)代表内核基准点位于kernel的中心位置。
delta:偏值,在计算结果中加上偏值。
border’Tvpe:像素外推法选择标志。
对以上的操作进行理论验证,代码如下:

int main() {

	//设定一个Mat矩阵
	float points[25] = { 1,2,3,4,5,
	6,7,8,9,10,
	11,12,13,14,15,
	16,17,18,19,20,
	21,22,23,24,25 };

	Mat data(5, 5, CV_32FC1, points);

	//x方向、y方向和联合滤波器的构建
	Mat a = (Mat_<float>(3, 1) << -1, 2, -1);
	Mat b = a.reshape(1, 1);

	//联合滤波器
	Mat ab = a * b;

	//验证高斯滤波的可分离性
	//生成高斯核
	Mat gaussX = getGaussianKernel(3, 1);

	//定义两种滤波器输出的结果
	Mat gaussData, gaussDataXY;

	//单纯高斯滤波
	GaussianBlur(data, gaussData, Size(3, 3), 1, 1, BORDER_CONSTANT);

	//分离滤波
	sepFilter2D(data, gaussDataXY, -1, gaussX, gaussX, Point(-1, -1), 0, BORDER_CONSTANT);

	Mat dataYX, dataY, dataXY, dataXY_sep;
	//分别进行行列滤波
	filter2D(data, dataY, -1, a, Point(-1, -1), 0, BORDER_CONSTANT);
	filter2D(dataY, dataYX, -1, b, Point(-1, -1), 0, BORDER_CONSTANT);

	//进行合并行列滤波
	filter2D(data, dataXY, -1, ab, Point(-1, -1), 0, BORDER_CONSTANT);

	//进行分离滤波
	sepFilter2D(data, dataXY_sep, -1, b, b, Point(-1, -1), 0, BORDER_CONSTANT);

	waitKey(0);
	return 0;
}

对图像进行可分离滤波:

	//读取图片
	Mat src = imread("1.png", IMREAD_ANYCOLOR);
	if (src.empty())
	{
		printf("不能打开空图片");
		return -1;
	}

	Mat imgXY;
	filter2D(src, imgXY, -1, ab, Point(-1, -1), 0, BORDER_CONSTANT);
	imshow("分离", imgXY);

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ESP8266连接 TLink 云平台

1.硬件准备 &#xff08;1&#xff09;正点原子 ATK-ESP-01 WIFI 模块 &#xff08;2&#xff09;正点原子 STM32F103ZET6精英板子 &#xff08;3&#xff09;USB转TTL模块 2.烧录固件 &#xff08;1&#xff09;烧录软件和固件都可以在正点原子增值资料包找到。 &#xff08;2…

【大数据学习篇8】 热门品类Top10分析

在HBase命令行工具中执行“list”命令&#xff0c;查看HBase数据库中的所有数据表。学习目标/Target 掌握热门品类Top10分析实现思路 掌握如何创建Spark连接并读取数据集 掌握利用Spark获取业务数据 掌握利用Spark统计品类的行为类型 掌握利用Spark过滤品类的行为类型 掌握利用…

English Learning - L3 作业打卡 Lesson2 Day14 2023.5.18 周四

English Learning - L3 作业打卡 Lesson2 Day14 2023.5.18 周四 引言&#x1f349;句1: A brown out is an expression for a reduction in electric power.成分划分弱读连读爆破语调 &#x1f349;句2: Brown outs happen when there is too much demand for electricity.成分…

微服务之以nacos注册中心,以gateway路由转发服务调用实例(第一篇)

实现以nacos为注册中心,网关路由转发调用 项目版本汇总项目初始化新建仓库拉取仓库项目父工程pom初始化依赖版本选择pom文件如下 网关服务构建pom文件启动类配置文件YMLnacos启动新建命名空间配置网关yml(nacos)网关服务启动 用户服务构建pom文件启动类配置文件YML新增url接口配…

行业分析——半导体行业

半导体行业是现代高科技产业和新兴战略产业&#xff0c;是现代信息技术、电子技术、通信技术、信息化等产业的基础之一。我国政府先后制定了《中国集成电路产业发展规划》和《中国人工智能发展规划》&#xff0c;明确提出要支持半导体和人工智能等产业的发展&#xff0c;为半导…

DRMS-关于开展防范风险整改工作的工作计划

防范风险整改工作 工作计划 &#xff12;&#xff10;&#xff12;&#xff13;年&#xff15;月&#xff11;&#xff10;日 尊敬的【DRMS】集群用户&#xff1a; 根据河南省郑州市国家高新技术产业开发区市场监督管理局《关于河南数权数字信息科技研究院网络违规整改通知》及…

微信小程序nodejs+vue高校食堂餐厅点餐订餐系统ja221

本文以实际运用为开发背景&#xff0c;运用软件工程原理和开发方法&#xff0c;它主要是采用 语言 node.js 框架&#xff1a;Express 前端:Vue.js 数据库&#xff1a;mysql 数据库工具&#xff1a;Navicat 开发软件&#xff1a;VScode 前端vueelementui, (1) vue引入elementu…

【IDEA使用码云教程】

IDEA使用码云教程 一、下载、安装git二、配置Gitee插件三、克隆项目四、上传项目五、推送项目六、更新项目 一、下载、安装git 1.打开git官网&#xff0c;选择你的操作系统 官网下载地址&#xff1a;https://git-scm.com/downloads 2.根据你的系统位数选择相应的版本下载 系统…

Spring Cloud Alibaba 集成 sentinel ,sentinel控制台不能检测到服务,但是在命令行配置启动参数就能看到服务

问题背景 Spring Cloud Alibaba 集成 sentinel &#xff0c;sentinel代码写的限流降级的功能都是好的&#xff0c;但是sentinel控制台不能检测到服务&#xff0c;在程序启动时配置JVM启动参数&#xff08;-Dcsp.sentinel.dashboard.serverlocalhost:18080 -Dproject.namename-…

成绩管理系统

系列文章 任务28 成绩管理系统 文章目录 系列文章一、实践目的与要求1、目的2、要求 二、课题任务三、总体设计1.存储结构及数据类型定义2.程序结构3.所实现的功能函数4、程序流程图 四、小组成员及分工五、 测试读入数据浏览全部信息增加学生信息保存数据删除学生信息修改学生…

【活动预告】数据集成引擎BitSail遇上CDC

BitSail是字节跳动开源数据集成引擎&#xff0c;于2022年10月26日宣布开源&#xff0c;可支持多种异构数据源间的数据同步&#xff0c;并提供离线、实时、全量、增量场景下全域数据集成解决方案。BitSail支撑了字节内部众多的业务线&#xff0c;支持多种数据源之间的批式/流式/…

头歌计算机组成原理实验—运算器设计(6)第6关:5位无符号阵列乘法器设计

第6关&#xff1a;5位无符号阵列乘法器设计 实验目的 帮助学生掌握阵列乘法器的实现原理&#xff0c;能够分析阵列乘法器的性能&#xff0c;能在 Logisim 中绘制阵列乘法器电路。 视频讲解 实验内容 在 Logisim 中打开 alu.circ 文件&#xff0c;在5位阵列乘法器中实现斜向…

Rocketmq常用使用场景

RocketMQ 是阿里开源的分布式消息中间件&#xff0c;跟其它中间件相比&#xff0c;RocketMQ 的特点是纯JAVA实现 基础概念 Producer&#xff1a; 消息生产者&#xff0c;负责产生消息&#xff0c;一般由业务系统负责产生消息 Producer Group&#xff1a; 消息生产者组&#xf…

聚会游戏玩什么?UMO轻松炒热气氛

UMO是一款有趣的多人益智桌游&#xff0c;考验玩家耐力和技巧的比拼&#xff01;玩家将在游戏中通过特定的规则来出牌&#xff0c;谁先出完所有牌谁就赢&#xff0c;游戏非常讲究策略和运气哦~ 当玩家手上只剩一张牌时&#xff0c;必须喊出UMO&#xff01;游戏因此得名。【数字…

3 个令人惊艳的 ChatGPT 项目,开源了!

过去一周&#xff0c;AI 界又发生了天翻地覆的变化&#xff0c;其中&#xff0c;最广为人知的&#xff0c;应该是 OpenAI 正式上线 ChatGPT iOS 客户端&#xff0c;让所有人都可以更方便的在手机上与 ChatGPT 聊天。 此外&#xff0c;Stable Diffusion 母公司 Stability AI 也…

论文阅读_音频压缩_SoundStream

论文信息 number headings: auto, first-level 2, max 4, _.1.1 name_en: SoundStream: An End-to-End Neural Audio Codec name_ch: SoundStream&#xff1a;一种端到端的神经音频编解码器 paper_addr: http://arxiv.org/abs/2107.03312 doi: 10.1109/TASLP.2021.3129994 dat…

Apache Kafka - 安装注意事项

文章目录 概述安装Kafka配置Kafka启动Kafka配置注意事项导图 概述 在现代的大数据时代&#xff0c;消息队列成为了极为重要的组件。Kafka作为一种高吞吐量、低延迟、可扩展的分布式发布订阅消息系统&#xff0c;在大数据领域得到了广泛的应用。来&#xff0c;这里我们将介绍如…

Python系列之字符串和列表

感谢点赞和关注 &#xff0c;每天进步一点点&#xff01;加油&#xff01; 目录 一、字符串 1.1 字符串的定义与输入 1.2 字符串的拼接与格式化输出 1.3 字符串的下标 1.4 字符串的切片和倒序 1.5 字符串的常见操作 二、列表-List 2.1 列表的常见操作 2.2 列表合并和拼…

RocketMQ(超级无敌认真好用,万字收藏篇!!!!)

文章目录 RocketMQ1 RocketMQ简介2 Rocket安装2.1 Rocket安装(基于Linux)2.2 控制台安装 3 Rocket的使用3.1 普通消息发送3.1.1 同步消息发送3.1.2 异步消息发送3.1.3 单向消息发送 3.2 普通消息消费3.2.1 集群消费3.2.2 广播消费 3.3 收发顺序消息3.3.1 全局顺序生产消费3.2.2…

越来越多企业出现网络安全问题,是什么原因导致的?

近年来网络安全问题层出不穷&#xff0c;信息泄露、网络钓鱼、黑客攻击等问题频繁发生。 尽管有证据表明在一些全球知名的企业组织中存在价值数十亿美元的网络安全漏洞&#xff0c;但企业仍然没有认真对待网络安全。大公司在寻找各种理由来减少其网络安全预算&#xff0c;从而…