opencv_c++学习(十九)

news/2024/11/19 7:35:59/

一、图像间的距离变换

三种常用的距离计算方法:
在这里插入图片描述
欧式距离这里就不在解释。
街区距离:顾名思义,就类似于城市距离一样,并不是通过两点间的距离,而是我们从一个地点到达另一个地点的路程(横纵坐标差值之和)。
棋盘距离:是两点横纵坐标之差的最大值。
距离变换函数:

distanceTransform(InputArray src, OutputArray dst,int distanceType, int maskSize, int dstType = cv_32F)

src:输入图像,数据类型为CV_8U的单通道图像。
dst:输出图像,与输入图像具有相同的尺寸,数据类型为CV_8U或者CV_32F的单通道图像。
distanceType:选择计算两个像素之间距离方法的标志。
maskSize:距离变换掩码矩阵大小,可以选择尺寸为DIST_MASK_3(3×3)、DIST_MASK_5 (5×5)
dstType:输出图像的数据类型,可以是CV_8U或者CV_32F。
应用案例如下:

int main() {//定义一个建议矩阵,用于演示Mat a = (Mat_<uchar>(5, 5) << 1, 1, 1, 1, 1,1, 1, 1, 1, 11,1, 1, 0, 1, 1,1, 1, 1, 1, 1,1, 1, 1, 1, 1);Mat dist_L1, dist_L2, dist_C, dist_L12;//计算街区距离distanceTransform(a, dist_L1, 1, 3, CV_8U);cout << dist_L1 << endl;//计算欧式距离distanceTransform(a, dist_L2, 2, 5, CV_8U);cout << dist_L2 << endl;//计算棋盘距离distanceTransform(a, dist_C, 3, 5, CV_8U);cout << dist_C << endl;//对图像进行距离变换//读取图片Mat src = imread("图片1.png", IMREAD_GRAYSCALE);if (src.empty()){printf("不能打开空图片");return -1;}Mat src_BW, srcBW_INV;//将图像转化为二值图像,同时把黑白区域颜色互换threshold(src, src_BW, 50, 255, THRESH_BINARY);threshold(src, srcBW_INV, 50, 255, THRESH_BINARY_INV);//根据距离变换进行距离计算Mat dist, dist_INV;//CV_32F可以使图像变的更清晰distanceTransform(src_BW, dist, 1, 3, CV_32F);distanceTransform(srcBW_INV, dist_INV, 1, 3, CV_8U);imshow("w", src_BW);waitKey(0); return 0;
}

二、图像形态学——腐蚀操作

在这里插入图片描述
图像腐蚀原理:
在这里插入图片描述
将结构元素的中心点放置在非零像素中,如果结构元素覆盖的范围存在零像素。则删除此时结构元素中心点所在位置元素,再进行平移操作,以此类图。
函数接口:

getStructuringElement(int shape, Size ksize, Point anchor = point(-1,-1))

shape:结构元素的种类。
ksize:结构元素的尺寸大小
anchor:中心点的位置,默认参数为结构元素的几何中心点。
函数生成的结构元素如下:
在这里插入图片描述
图像腐蚀操作函数:

erode(lnputArray src, OutputArray dst, lnputArray kernel, Point anchor = Point(-1,-1), int iterations = 1, int borderType = BORDER_CONSTANT, const Scalar & borderValue = morphologyDefaultBordervalue())

src:输入的待腐蚀图像,图像的通道数可以是任意的,但是图像的数据类型必须是CV_8U,CV_16U,CV_16S,CV_32F或CV_64F之一。
dst:腐蚀后的输出图像,与输入图像src具有相同的尺办和数据类型。
kernel:用于腐蚀操作的结构元素,可以自己输入,也可以用getStructuringElement()函数生成。anchor:中心点在结构元素中的位置,默认参数为结构元素的几何中心点。
iterations:腐蚀的次数。
borderType:像素外推法选择标志。
borderValue:边界不变的边界值。
图像腐蚀操作案例:

int main() {//读取图片Mat src = imread("图片1.png", IMREAD_ANYCOLOR);if (src.empty()){printf("不能打开空图片");return -1;}Mat erode_black1, erode_black2;//开始图像腐蚀操作//定义结构元素Mat struct1, struct2;//3*3大小的矩形结构元素struct1 = getStructuringElement(0, Size(3, 3));//3*3大小的十字结构元素struct1 = getStructuringElement(1, Size(3, 3));//腐蚀操作erode(src, erode_black1, struct1);erode(src, erode_black2, struct2);imshow("w", erode_black1);imshow("q", erode_black2);waitKey(0);return 0;
}

三、图像形态学——膨胀操作

在这里插入图片描述
与图像腐蚀相反,这里就不再赘述。
结构元素生成函数:

getStructuringElement(int shape, Size ksize, Point anchor = Point(-1,-1)

shape:结构元素的种类。
ksize:结构元素的尺寸大小
anchor:中心点的位置,默认参数为结构元素的几何中心点。
在这里插入图片描述
图像膨胀操作函数:

dilate(lnputArray src, OutputArray dst, lnputArray kernel, Point anchor = Point(-1,-1), int iterations = 1, int borderType = BORDER_cONSTANT, const Scalar & borderValue = morphologyDefaultBordervalue())

src:输入的待膨胀图像,图像的通道数可以是任意的,但是图像的数据类型必须是CV_8U,CV_160,cV_16S,cV_32F或CV_64F之一。
dst:腐蚀后的输出图像,与输入图像src具有相同的尺寸和数据类型。
kernel:用于膨胀操作的结构元素,可以自己输入,也可以用getStructuringElement()函数生成。anchor:中心点在结构元素中的位置,默认参数为结构元素的几何中心点。
iterations:腐蚀的次数。
borderType:像素外推法选择标志。
borderValue:边界不变的边界值。
膨胀函数的使用案例:

int main() {//读取图片Mat src = imread("图片1.png", IMREAD_ANYCOLOR);if (src.empty()){printf("不能打开空图片");return -1;}Mat erode_black1, erode_black2;//开始图像腐蚀操作//定义结构元素Mat struct1, struct2;//3*3大小的矩形结构元素struct1 = getStructuringElement(0, Size(3, 3));//3*3大小的十字结构元素struct1 = getStructuringElement(1, Size(3, 3));//膨胀操作dilate(src, erode_black1, struct1);dilate(src, erode_black2, struct2);imshow("w", erode_black1);imshow("q", erode_black2);waitKey(0);return 0;
}

http://www.ppmy.cn/news/89205.html

相关文章

torch.distributed.launch多卡多机

torch.distributed.launch命令介绍 我们在训练分布式时候&#xff0c;会使用到 torch.distributed.launch 可以通过命令&#xff0c;来打印该模块提供的可选参数 python -m torch.distributed.launch --help usage: launch.py [-h] [--nnodes NNODES] [--node_rank NODE_RANK]…

SpringMVC详情

JavaEE体系结构包括四层&#xff0c;从上到下分别是应用层、Web层、业务层、持久层。Struts和SpringMVC是Web层的框架&#xff0c;Spring是业务层的框架&#xff0c;Hibernate和MyBatis是持久层的框架。 为什么要使用SpringMVC&#xff1f; 很多应用程序的问题在于处理业务数…

Spring Cloud Feign 是什么?如何使用它来简化 RESTful 调用?

Spring Cloud Feign 是什么&#xff1f;如何使用它来简化 RESTful 调用&#xff1f; 在分布式系统中&#xff0c;服务之间的通信是非常常见的场景。通常情况下&#xff0c;服务之间的通信是通过 RESTful API 实现的。但是&#xff0c;手动编写 RESTful 调用代码非常繁琐&#…

云渲染平台为什么越来越多的效果图公司开始使用?

随着3dmax版本的不断更迭&#xff0c;包括常用的V-Ray渲染器和Corona渲染器的不断更新&#xff0c;室内设计行业对于 效果图的渲染要求越来越高。而要求更高的渲染精度和更真实的渲染效果&#xff0c;所需要付出的代价则是不断增长的参数&#xff0c;这会使渲染一张效果图的时间…

vscode插件推荐

Vuter vue代码高亮区分VueHelper 代码提示vue3-snippets-for-vscode 生成vue3模板vue3-snippets 生成vue模板Vue VSCode Snippets 生成vue模板Vue Language Features (Volar) vue高亮区分Vue 3 Support - All In One 生成vue模板Vue 2 Snippets 生成vue模板vscode-icons 文件图…

2023-05-26 mysql列存储引擎-外连接相比内连接过于耗时-分析

摘要: 外连接相比内连接过于耗时,本文记录其分析过程 参考: https://en.wikipedia.org/wiki/Venn_diagram 查询SQL 外连接: SELECTa.ROW_IDFROMc1md_bank_acct aLEFT JOIN (SELECTxx.account_id,xx.fiscal_date,xx.balanceFROM(SELECTaccount_id,MAX(fiscal_date) fiscal_da…

C++ 代码整洁之道

NOTICE: 这篇文章的框架条目来自《C代码整洁之道&#xff1a;C17可持续软件开发模式实践》&#xff0c;作者: [德] 斯提芬罗特。书籍原名"Clean C: Sustainable Software Development Patterns and Best Practices with C 17"。 文章目录 编码基本原则保持简单和直接…

三网91话费API接口源码分享

今天给大家分享一个小项目&#xff1a;话费CPS&#xff0c;也就是代充服务。 与我们日常的充值方式&#xff08;快充&#xff09;不同&#xff0c;今天要讲的这种充值方式属于“慢充”。 我们平时需要充值的时候&#xff0c;大都是通过微信、支付宝、营业厅等官方渠道进行充值…