opencv_c++学习(十六)

news2024/10/7 20:30:52

一、线性滤波

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

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);

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

详解RGB和XYZ色彩空间转换之上

前言 首先需要指明本文中描述的R,G,B并非通常的sRGB中的三个分量R,G,B&#xff0c;而是波长分别为700nm&#xff0c;546.1nm&#xff0c;435.8nm的单色红光&#xff0c;单色绿光&#xff0c;单色蓝光。sRGB中的RGB中的红色、绿色、蓝色已经不是单色光了。虽然习惯上大家都叫RGB…

Java配置类整合SSM框架实现用户登录

文章目录 一&#xff0c;创建数据库与表&#xff08;一&#xff09;创建数据库&#xff08;二&#xff09;创建用户表&#xff08;三&#xff09;在用户表里插入记录 二&#xff0c;创建Maven项目三&#xff0c;添加相关依赖四&#xff0c;创建日志属性文件五&#xff0c;创建数…

自动化测试与手工测试的区别是什么?

目录 什么是自动化测试? 自动化测试与手工测试的区别 自动化测试的困境 什么是自动化测试? 自动化测试是指利用软件测试工具自动实现全部或部分测试&#xff0c;它是软件测试的一个重要组成 部分&#xff0c;能完成许多手工测试无法实现或难以实现的测试。能够正确、合理地…

DAY 62 mysql的高级语句

表连接查询 MYSQL数据库中的三种连接&#xff1a; inner join(内连接)&#xff1a;只返回两个表中联结字段相等的行&#xff08;有交集的值&#xff09;left join(左连接)&#xff1a;返回包括左表中的所有记录和右表中联结字段相等的记录right join(右连接)&#xff1a;返回…

【P28】JMeter 测试活动(Flow Control Action)

文章目录 一、测试活动&#xff08;Flow Control Action&#xff09;参数说明二、测试计划设计2.1、Pause 2.2、Break Current Loop2.3、Stop 一、测试活动&#xff08;Flow Control Action&#xff09;参数说明 控制取样器流程 选择线程组右键 >>> 添加 >>&g…

chatgpt赋能Python-python8_3

Python 8%3 - 了解Python中的求余运算 Python是一种通用编程语言&#xff0c;具有广泛的应用领域&#xff0c;如Web开发、数据分析、机器学习等。在Python中&#xff0c;求余运算是一种重要且常用的运算。本文将介绍Python中的求余运算&#xff0c;并且重点讲解Python中的8%3的…

【二叉树】(一)

&#x1f58a;作者 : D. Star. &#x1f4d8;专栏 : 数据结构 &#x1f606;今日分享 : 为什么阴干的衣服会有味道? 衣服上超过三分之二的污垢来自我们身体外部的分泌物&#xff0c;即汗水和皮脂。如果在洗衣服的过程中皮脂没有洗干净的话&#xff0c;它就可以成为衣服&#x…

计算机基础数据结构和算法动态可视化展示网站收录

计算机中有很多数据结构、算法对于小白来说非常难理解&#xff0c;交互式动画一步步展示整个过程可以帮助我们快速准确地理解这些算法。我们整理了12个可动态交互和展示常见数据结构和排序、图算法等网站&#xff0c;总计12个 收录到 webhub123​www.webhub123.com/#/home/de…

C 学习笔记 —— 内存操作函数

文章目录 内存操作函数memcpy实例 memmove内存重叠问题 memcmp实例 memset不能任意赋值 参考资料 内存操作函数 内存操作函数也是在<string.h>头文件中的 四个内存函数&#xff1a; memcpy(内存拷贝&#xff09; memmove&#xff08;内存移动&#xff09; memcmp&#…

C++ 期末冲刺3h

C 1. 基础程序 #include "iostream" // C头文件 #include "stdio.h" // C 头文件 //using namespace std; // 命名空间// main() 是程序开始执行的地方int main() {std::cout << "Hello, World!" << "\n";return 0; …

Jenkins持续集成之windows下安装jenkins

官方地址&#xff1a; https://jenkins.io/download/ 安装jenkins 下载windows和linux通用的war包 启动 Jenkins 将 jenkins.war 放到 tomcat安装目录/webapps 下 访问 http://127.0.0.1:8080/jenkins 我这里因为之前已经走过初始化步骤了&#xff0c;所以直接进去了主界面…

Datacom-HCIE 题库 03(10月26日更新)--含解析

单选题 1.[试题编号&#xff1a;189810] &#xff08;单选题&#xff09;SSH算法协商阶段中&#xff0c;双方交换自身所支持的算法列表。SSH服务器的对称加密算法列表依次为:aes256-ctr,aes192-ctr,aes128-ctr,aes256-cbc。SSH客户端的对称加密算法列表依次为&#xff1a;aes1…

2023年NOC大赛创客智慧编程赛项图形化复赛模拟题二,包含答案解析

2023年NOC大赛创客智慧编程赛项图形化复赛模拟题二,包含答案解析 第一题: 在源程序“小蝙蝠”文件中,实现小蝙蝠遇到不同的角色会说不同的话,以及切换不同的造型要求: 1:游戏开始时,小蝙蝠角色是造型 a,并能够用键盘控制上、下、左、右移动; 2:移动小蝙蝠,距离角色雪…

利用列表推导式遍历子目录PDF文件

一、问题的提出 之前&#xff0c;我们探索了如何用Python来遍历子目录文件&#xff0c;详情可以见下面的文章&#xff1a; PythonFan&#xff1a;Python遍历子目录文件的多种方法5 赞同 0 评论文章正在上传…重新上传取消https://zhuanlan.zhihu.com/p/609327324 以上方面有…

t检验.医学统计实例详解

t检验是医学统计学中常用的一种假设检验方法&#xff0c;用于比较两个样本均值是否有显著差异。它可以帮助医学研究者确定一个治疗方法或药物是否显著地改善了患者的症状或生理指标。 在医学研究中&#xff0c;t检验常被用来&#xff1a; 比较两个独立样本的均值&#xff1a;…

这个 归并排序详解过程 我能吹一辈子!!!

文章目录 归并排序概念归并排序算法思路归并排序递归实现归并排序非递归实现 归并排序概念 1945年&#xff0c;约翰冯诺依曼&#xff08;John von Neumann&#xff09;发明了归并排序&#xff0c;这是典型的分治算法的应用。 归并排序&#xff08;Merge sort&#xff09;是建立…

【2023秋招】华为od22-12-14三道题(思路+代码)

2023大厂笔试模拟练习网站&#xff08;含题解&#xff09; www.codefun2000.com 最近我们一直在将收集到的各种大厂笔试的解题思路还原成题目并制作数据&#xff0c;挂载到我们的OJ上&#xff0c;供大家学习交流&#xff0c;体会笔试难度。现已录入200道互联网大厂模拟练习题&…

Godot引擎 4.0 文档 - 循序渐进教程 - 监听玩家输入

本文为Google Translate英译中结果&#xff0c;DrGraph在此基础上加了一些校正。英文原版页面&#xff1a; Listening to player input — Godot Engine (stable) documentation in English 监听玩家输入 在上一课创建您的第一个脚本的基础上&#xff0c;让我们看看任何游戏…

Linux基本指令实现4及热键指令详解

目录 Linux热键补充&#xff1a; 1.bc指令&#xff1a; Tab键的智能补充&#xff1a; ctrlc键&#xff1a; uname指令&#xff1a; lscpu指令&#xff1a; lsmem指令&#xff1a; df -h指令&#xff1a; 关机指令&#xff1a; 扩展指令&#xff1a; Linux热键补充&#…

【MySQL通关之旅】从山脚到山顶(傲视群雄版)

查 基本查询 select 查询指定 name,age 字段并返回 select name,age from 表名 查询所有字段并返回 select * from 表名 查询指定 name,age 字段并起别名(姓名,性别) 返回 select name as ‘姓名’,age as ‘性别’ from 表名 去除某字段重复记录 select distinct 字段名 from…