opencv#40 图像细化

图像细化原理

作用:图像细化是将图像的线条从多像素宽度减少到单位像素宽度的过程,又被称为“骨架化”,删除像素点的标准:

 通常情况下,我们使用二值化图像,我们在判断是否要删除某些像素点时,要进行两次判断。我们需要一个3*3的区域,也就是p1的八邻域范围内的数据,如果黑色的像素数目在2~6之间,则满足了其中的一个条件,在八邻域中,如果按照顺时针方向,有多少次由黑到白的形式?当且仅有1次时,就满足了删除p1点的第二个条件,第三四条件则是看三个像素的乘积是否为0,依次按照这四个条件遍历图像中的每一个非0像素,将满足这些条件的像素置为待删除的像素点,之后再集体将待删除点去除,然后继续第二次判断,与第一次类似。

相关函数

thinning()

void cv::ximgproc::thinning(InputArray    src,OutputArray   dst,int           thinningType = THINNING_ZHANGSUEN)

·src:输入图像,必须是CV_8U单通道图像。通常使用二值化图像,灰度图像也可以。

·dst:输出图像,与输入图像具有相同的尺寸和数据类型。

·thinningType:细化算法选择标志,可以选择的参数为THINNING_ZHANGSUEN(简记为0)和THINNING_GUOHALL(简记为1)。

在之前的程序中我们使用的都是标准的opencv库,此函数需要opencv扩展库。

#include <opencv2/opencv.hpp>
#include <iostream>
#include <opencv2/ximgproc.hpp>using namespace cv; //opencv的命名空间
using namespace std;//主函数
int main()
{//中文字进行细化Mat img = imread("E:/opencv/opencv-4.6.0-vc14_vc15/opencv/ha.jpg");	if (img.empty()){cout << "请确认图像文件名称是否正确" << endl;return -1;}//英文字-实心圆和圆环细化Mat words = Mat::zeros(100, 200, CV_8UC1);//创建一个黑色的背景图putText(words, "Learn", Point(30, 30), 2, 1, Scalar(255), 2);//添加英文putText(words, "OpneCV 4",Point(30, 60), 2, 1, Scalar(255), 2);circle(words, Point(80, 75), 10, Scalar(255), -1);//添加实心圆circle(words, Point(130, 75), 10, Scalar(255), 3);//添加圆环Mat thin1, thin2;ximgproc::thinning(img, thin1, 0);//注意类名;ximgproc::thinning(words, thin2, 0);//显示处理结果imshow("thin1",thin1);imshow("img",img);imshow("thin2", thin2);imshow("words", words);waitKey(0);//等待函数用于显示图像,按下键盘任意键后退出return 0;}

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

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

相关文章

基于YOLOv8的足球赛环境下足球目标检测系统(Python源码+Pyqt6界面+数据集)

博主简介 AI小怪兽&#xff0c;YOLO骨灰级玩家&#xff0c;1&#xff09;YOLOv5、v7、v8优化创新&#xff0c;轻松涨点和模型轻量化&#xff1b;2&#xff09;目标检测、语义分割、OCR、分类等技术孵化&#xff0c;赋能智能制造&#xff0c;工业项目落地经验丰富&#xff1b; …

壹[1],Xamarin开发

1&#xff0c;环境 VS2022 注&#xff1a; 1&#xff0c;本来计划使用AndroidStudio&#xff0c;但是也是一堆莫名的配置让人搞得很神伤&#xff0c;还是回归C#。 2&#xff0c;MAUI操作类似&#xff0c;但是很多错误解来解去&#xff0c;且调试起来很卡。 3&#xff0c;最…

Java 数据抓取

大家好我是苏麟 , 今天聊聊数据抓取 . 大家合理使用 注意&#xff0c;爬虫技术不能滥用&#xff0c;干万不要给别人的系统造成压力、不要侵犯他人权益! 数据抓取 实质上就是java程序模拟浏览器进行目标网站的访问&#xff0c;无论是请求目标服务器的接口还是请求目标网页内容…

如何在python中“开小灶” —— python异步线程指导

文章目录 一、问题来源二、注意事项三、举例 一、问题来源 问题是这样的&#xff0c;在python中写代码遇到个问题&#xff0c;跑程序时有某一步很耗时&#xff0c;导致接口响应的时间很慢&#xff0c;那么就有个办法&#xff0c;把这一步放入异步线程中&#xff0c;主线程走主…

idea Statistic使用

问题描述&#xff1a;本地idea版本为2018.3.5&#xff0c;安装Statistic插件后没有出现Statistic图标 原因如下&#xff1a;插件版本太新了&#xff0c;需要历史版本 解决办法&#xff1a; IDEA安装代码统计插件Statistic后左下角图标出不来(亲测)_idea statistic不展示-CSD…

生成式AI应用开发参考架构

人机交互正在迅速经历软件开发在过去二十年中从未见过的巨大范式转变。 从传统的基于规则的系统到复杂的生成人工智能 (GAI) 模型&#xff0c;破译用户意图并提供准确、上下文丰富的响应的方法已变得至关重要。 在本系列文章中&#xff0c;我将深入探讨利用 GAI 重新构想应用程…

《向量数据库指南》——AIGC 需求的快速变化,催生了Milvus Cloud向量数据库的超高速迭代

对于“版本”成为热度排名第一的关键词,我开始是有点意外的,仔细一想似乎也在情理之中。2023年,是 AIGC 大爆发的一年,LLM 展现出了强大的分析、推理、归纳、总结能力。但是,由于缺乏最新的和特定领域的训练数据,大模型“幻觉”成为困扰 AIGC 开发者的一大难题。随着 RAG…

基于腾讯云自然语言处理 NLP服务实现文本情感分析

文章目录 一、前言二、NLP 服务简介三、Python 调用腾讯云 NLP 服务 SDK 构建情感分析处理3.1 开通腾讯云 NLP 服务3.2 创建的腾讯云持久证书&#xff08;如果已创建请跳过&#xff09;3.2 在腾讯云服务器中安装 Git 工具以及 Python 环境3.3 安装 qcloudapi-sdk-python3.4 部署…

Kotlin快速入门系列11

Kotlin的集合 集合类 Java类库有一套相当完整的容器集合类用来持有对象。跟Java一样&#xff0c;集合类存放的都是对象的引用&#xff0c;而非对象本身(我们经常说的集合指的是集合中对象的引用)&#xff0c;Kotlin的集合类是在Java的集合类库基础上进行的优化&#xff0c;新引…

Zookeeper分布式队列实战

目录 Zookeeper分布式队列 普通方式实现 设计思路 具体实现 使用Curator实现 具体实现 注意事项 Zookeeper分布式队列 常见的消息队列有:RabbitMQ&#xff0c;RocketMQ&#xff0c;Kafka等。Zookeeper作为一个分布式的小文件管理系统&#xff0c;同样能实现简单的队列功…

科技云报道:云原生PaaS,如何让金融业数字化开出“繁花”?

科技云报道原创。 在中国金融业数字化转型的历史长卷中&#xff0c;过去十年无疑是一部磅礴的史诗。 2017年&#xff0c;南京银行第一次将传统线下金融业务搬到了线上。那一年&#xff0c;它的互联网金融信贷业务实现了过去10年的业务总额。 2021年&#xff0c;富滇银行通过…

Unity 自动轮播、滑动轮播

如图所示&#xff0c;可设置轮播间隔&#xff0c;可左右滑动进行轮播 1.在UGUI创建个Image&#xff0c;添加自动水平组件 2.添加并配置脚本 3.代码如下&#xff0c;都有注释 using UnityEngine; using UnityEngine.UI;public class IndicatorManager : MonoBehaviour {public …