opencv_c++学习(二十)

news2024/12/23 9:18:36

一、形态学应用案例

开、闭运算、形态学梯度等原理:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
相关函数:

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

op:形态学操作的类型标志。见下图:
iterations:处理的次数。
在这里插入图片描述
应用案例如下:

int main() {

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

	//二值化计算
	threshold(src, src, 80, 255, THRESH_BINARY);

	//构建5*5矩形结构元素
	Mat kernel_keys = getStructuringElement(0, Size(5, 5));

	Mat src_open, src_close, src_gradient, src_tophat, src_blackbat, src_hitmiss;

	//开运算
	morphologyEx(src, src_open, MORPH_OPEN, kernel_keys);
	imshow("o", src_open);

	//闭运算
	morphologyEx(src, src_close, MORPH_CLOSE, kernel_keys);
	imshow("c", src_close);

	//梯度运算
	morphologyEx(src, src_gradient, MORPH_CLOSE, kernel_keys);
	imshow("g", src_gradient);

	//顶帽运算
	morphologyEx(src, src_tophat, MORPH_TOPHAT, kernel_keys);
	imshow("t", src_tophat);

	//黑帽运算
	morphologyEx(src, src_blackbat, MORPH_BLACKHAT, kernel_keys);
	imshow("b", src_blackbat);

	//击中击不中运算
	morphologyEx(src, src_hitmiss, MORPH_HITMISS, kernel_keys);
	imshow("h", src_hitmiss);


	waitKey(0);
	return 0;

}

二、图像细化

图像细化原理:
图像细化是将图像的线条从多像素宽度减少到单位像素宽度的过程,又被称为“骨架化”。删除像素点的标准:
在这里插入图片描述
首先计算p1中八邻域像素值之和并满足下列几点要求:
1、首先判断p1像素点周围有多少黑色像素点(数值为0),若其满足大于等于二、小于等于六时,则满足第一个条件。
2、在八邻域像素点中,顺时针旋转,像素有多少次由黑变到白的形式。当其仅有一次时,则满足第二个条件。
3、p2p4p6=时,则满足第三个条件
4、p4p6p8=时,则满足第四个条件
第二次细化见上图右侧红框,这里就不再赘述。
相关函数:

thinning(InputArray src, OutputArray dst,int thinningType = THINNING_ZHANGSUEN)

src:输入图像,必须是CV_8U的单通道图像。
dst:输出图像,与输入图像具有相同的尺寸和数据类型。
thinningType:细化算法选择标志,可以选择的参数THINNING_ZHANGSUEN (简记为0)和THINNING_GUOHALL(简记为1)。
应用此函数之前需要对opencv的基础版本进行扩展,这里我们进行简单的记录。

在这里我们需要用到三个内容:
1、CMake 官方下载网址:https://cmake.org/download/
这里我们选择对应的版本,在这里我们安装的是3.4.16,因此我们这里安装的版本如下:在这里插入图片描述
cmake的安装过程如下:
流程概括如下:
1、找到安装包,双击打开
2、打开界面,点击Next
3、勾选协议,点击Next
4、选择添加 CMake 到系统环境变量,勾选创建桌面图标(可选项),点击Next
5、选择安装路径(路径不能出现汉字,防止报错),点击Next
6、点击 Install 进行安装
7、进入安装界面,稍等片刻
8、安装结束,点击 Finish 完成安装
至此安装Cmake软件结束。除此之外我们还需要下载opencv基础版源码以及扩展版源码:
我们直接进入github,https://github.com/opencv/opencv:
在这里插入图片描述
点击红框位置,并下载对应版本的源码。
扩展包的链接如下:https://github.com/opencv/opencv_contrib。下载对应版本的源码。并将下载的源码解压,我这里存放的路径如下:

在这里插入图片描述
这里build是存放编译后的文件内容,opencv这一文件夹忽略。
然后我们打开cmake:
在这里插入图片描述

需要设置两个路径,第一个路径是我们opencv的根目录、一个是我们编译后的文件需要存放的文件夹,设置完成后我们点击configure开始编译,我这里编译还是比较顺利的,一步完成,完成后我们需要根据自己的需求勾选需要的选项内容。在这里我只设置了一些基础内容,勾选了BUILD_opencv_world、OPENCV_ENABLE_NONFREE,以及设置了OPENCV_ EXTRA MODULES PATH的路径:在这里插入图片描述
设置完成之后我们就可以开始再次编译了,编译完成之后如果没有报错就可以点击Generate生成编译文件了。生成之后我们点击Open_Project使用VS017进行编译,进入到VS2017之后我们选择生成-批生成-勾选对应的选项进行编译。至此我们就可以使用扩展包了。以前安装过opencv基础版的同学,记住要在使用之前将环境变量更换为重新编译之后的路径。

图像细化函数的应用实例:

int main() {

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

	//创建黑色背景
	Mat back = Mat::zeros(100, 200, CV_8UC1);

	//添加文字
	putText(back, "qwe", Point(30, 30), 2, 1, Scalar(255), 2);

	//添加实心圆
	circle(back, Point(80, 75), 10, Scalar(255), -1);

	//添加圆环
	circle(back, Point(80, 75), 10, Scalar(255), 3);

	//开始细化
	Mat thin1, thin2;
	ximgproc::thinning(src, thin1, 0);
	ximgproc::thinning(back, thin2, 0);

	imshow("q", thin1);
	imshow("w", thin2);
	waitKey(0);
	return 0;
}

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

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

相关文章

Android中静态和动态文字的绘制和测量

Android中静态和动态文字的绘制和测量 Android中自定义视图的时候存在两种情况,静态文字和动态文字。 顾名思义,静态文字就是显示内容是固定的,不会产生变化的文字,而动态文字则是内容会不断产生变化的文字信息。 在说明为什么…

Revit技巧 | Revit中图元不可见怎么办?

在revit中,控制图元课件性的设置有很多种,因此图元不可见,也会有各种各样的原因,这也是经常困扰新手的问题,下面我把这些解决办法做一些归纳总结。 图元如果过远偏离当前视图的中心,将导致视图不可见这时&…

MySQL:数据库的查询与连接

目录 1.复合查询 1.1 多表查询(联合查询) 1.2 join on (inner join) 1.3 自连接 1.4 子查询 1.5 合并查询 2.内外连接 3.关于高内聚、低耦合 1.复合查询 1.1 多表查询(联合查询) 什么是多表插叙?实际开发中往…

网络安全管理员证书有什么用?2023证书怎么考?证书报考条件?

网络安全管理员是做什么工作的呢?现如今,网络高速发展,带动了很多行业的兴起,比如说电商行业,今天已经步入到足不出户即可购物的时代了,当然网络也是一把“双刃剑”,带来了好处的同时&#xff0…

Sui Move Object讲解

要了解Sui的独特特性,首先要了解Sui中以对象为中心的数据模型。 Sui的设计初衷是重新定义数字资产所有权的可能性。重新设计的一个基本部分 — — Sui是以对象为中心的数据模型,也是Sui和其他Layer 1区块链之间的一个显著区别。 其他L1如何处理资产所有…

day8 - 使用不同的滤波核进行图像降噪

本期主要介绍用于图像平滑处理的滤波,分别是方框滤波、均值滤波、中值滤波、高斯滤波,比较不同滤波的效果;并了解自定义滤波器进行图像处理。 完成本期内容,你可以: 会使用方框滤波、均值滤波、中值滤波、高斯滤波进行…

实时聊天组合功能,你了解吗?

你有兴趣安装实时聊天组合功能吗?如果您选择了SaleSmartly(ss客服),您的实时聊天插件可以不仅仅只是聊天通道,还可以有各种各样的功能,你不需要包含每一个功能,正所谓「宁缺勿滥」,功…

Windows主机中构建适用于K8S Operator开发环境

基于 win 10 打造K8S应用开发环境 一、wsl子系统安装 在cmd命令行终端或powershell中操作 1.1 确认windows操作系统版本 1.2 开启wsl功能 1.3 wsl配置 PS C:\Users\cpf> wsl提示:适用于 Linux 的 Windows 子系统没有已安装的分发版。可以通过访问 Microsoft St…

使用canvas给图片添加水印

上接文章“图片处理” canvas元素其实就是一个画布,我们可以很方便地绘制一些文字、线条、图形等,它也可以将一个img标签里渲染的图片画在画布上。 我们在上传文件到后端的时候,使用input标签读取用户本地文件后得到的其实是一个Blob对象&a…

Redis7实战加面试题-基础篇(Redis持久化,Redis事务,Redis管道,Redis发布订阅)

Redis持久化 RDB (Redis DataBase) RDB(Redis 数据库):RDB 持久性以指定的时间间隔执行数据集的时间点快照。实现类似照片记录效果的方式,就是把某一时刻的数据和状态以文件的形式写到磁盘上,也就是快照。这样一来即使…

HCIA-ARP、MAC、交换机工作原理

目录 万能数据转发模型 ARP协议:地址解析协议 以太网帧的交换 IP地址和Mac地址的区别: 以太网交换机介绍: 交换机的工作原理: ​编辑交换机处理数据的三种方式: Mac表和ARP表的区别: 万能数据转发模…

自定义注解和@Target、@Retention注解的使用

说明:注解可以理解为另一种形式的配置,可用于在类上、方法上等,标志是“”,如重写方法上的“Override”就是一种注解。这里我通过一个实例,来介绍自定义注解和java元注解(Target、Retention)的使…

案例20:Java物流管理系统设计与实现开题报告

博主介绍:✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专…

ChatGPT全球最大开源平替OpenAssistant:基于Pythia和LLaMA微调而来

论文地址:https://drive.google.com/file/d/10iR5hKwFqAKhL3umx8muOWSRm7hs5FqX/view 项目地址:https://github.com/LAION-AI/Open-Assistant 数据集地址:https://huggingface.co/datasets/OpenAssistant/oasst1 体验地址:http…

Hiredis的基本使用

目录 前言 一.hiredis的安装 二.同步API 2.1.连接Redis数据库 2.1.1 无超时时间,阻塞等待连接 2.1.2 设置超时时间,阻塞等待连接。 2.1.3 非阻塞,不管连接与否,立即返回。 2.2.执行命令 2.2.1 返回执行上下文 2.2.2 没有返回执…

伪类元素的用法总结

1:自闭标签不适用伪类元素 自闭合标签 1. 一般标签   由于有开始符号和结束符号&#xff0c;因此可以在内部插入其他标签或文字。 <p>“绿叶&#xff0c;给你初恋般的感觉。”</p> 2. 自闭合标签   由于只有开始符号而没有结束符号&#xff0c;因此不可以在内…

2023-05-24:为什么要使用Redis做缓存?

2023-05-24&#xff1a;为什么要使用Redis做缓存&#xff1f; 答案2023-05-24&#xff1a; 缓存的好处 买啤酒和喝啤酒的例子可以帮助我们理解缓存的好处。 假设你在超市里买了一箱啤酒&#xff0c;如果你需要每次想喝啤酒就去超市购买&#xff0c;无疑会浪费很多时间和精力…

vue+element纯手工完美模拟实现小米有品网站

一、预览 小米有品官网&#xff1a;小米有品 本作品demo预览地址&#xff1a;点击预览 二、效果图对比 1.官方效果截图&#xff1a; 2.作者实现的demo效果图&#xff1a; 首页&#xff1a; 上新精选&#xff1a; 商品详情&#xff1a; 购物车&#xff1a; 登录&#xff1a; …

【论文阅读】23_SIGIR_Disentangled Contrastive Collaborative Filtering(分离对比协同过滤)

【论文阅读】23_SIGIR_Disentangled Contrastive Collaborative Filtering&#xff08;分离对比协同过滤&#xff09; 文章目录 【论文阅读】23_SIGIR_Disentangled Contrastive Collaborative Filtering&#xff08;分离对比协同过滤&#xff09;1. 来源2. 介绍3. 模型方法3.1…

最小生成树 Prim算法实现(c语言代码)

【问题描述】 城市之间的公路交通可以用一个无向图表示。如下图所示&#xff1a; 顶点表示城市、边表示城市之间有公路相连&#xff0c;边上的权值表示城市之间的公路长度。 编程解决以下问题&#xff1a; &#xff08;1&#xff09;输入城市信息和城市之间公路的信息&…