当前位置: 首页 > news >正文

OpenCV——八邻域断点检测

目录

  • 一、理论基础
    • 1、八邻域
    • 2、断点检测
  • 二、代码实现
  • 三、结果展示
  • 四、参考链接

在这里插入图片描述

OpenCV——八邻域断点检测由CSDN点云侠原创,爬虫自重。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫。

一、理论基础

1、八邻域

在这里插入图片描述

图1 八邻域示意图

在这里插入图片描述

图2 八邻域对应坐标关系

2、断点检测

  首先将图像进行二值化,然后检测以 P 1 P_1 P1为中心的它的八个领域,

  • P 2 + P 3 + P 4 + P 5 + P 6 + P 7 + P 8 + P 9 ≤ 255 × 6 P_2+P_3+P_4+P_5+P_6+P_7+P_8+P_9\leq255\times6 P2+P3+P4+P5+P6+P7+P8+P9255×6,则 P 1 P_1 P1点是一个边界点。
  • P 2 + P 3 + P 4 + P 5 + P 6 + P 7 + P 8 + P 9 ≥ 255 × 6 P_2+P_3+P_4+P_5+P_6+P_7+P_8+P_9\geq255\times6 P2+P3+P4+P5+P6+P7+P8+P9255×6,则 P 1 P_1 P1点是一个内部点。
  • P 2 + P 3 + P 4 + P 5 + P 6 + P 7 + P 8 + P 9 = 0 P_2+P_3+P_4+P_5+P_6+P_7+P_8+P_9=0 P2+P3+P4+P5+P6+P7+P8+P9=0,则 P 1 P_1 P1点是一个孤立点。
  • P 2 + P 3 + P 4 + P 5 + P 6 + P 7 + P 8 + P 9 = 255 P_2+P_3+P_4+P_5+P_6+P_7+P_8+P_9=255 P2+P3+P4+P5+P6+P7+P8+P9=255,则 P 1 P_1 P1点是一个端点。
    在这里插入图片描述
图3 点的类型

二、代码实现

#include <opencv2/opencv.hpp>using namespace std;
using namespace cv;vector<Point> breakImage(Mat& src);int main()
{  // 加载RGB图片Mat colorImage, grayImage, binImage;colorImage = imread("2.png");// 显示图片namedWindow("原始图像", cv::WINDOW_NORMAL); // 图像窗口函数imshow("原始图像", colorImage);// 图像二值化cvtColor(colorImage, grayImage, COLOR_BGR2GRAY);threshold(grayImage, binImage, 1, 255, THRESH_BINARY);vector<Point>P;P = breakImage(binImage);int nsize = P.size();Mat temp = Mat::zeros(binImage.size(), CV_8UC3);// 用圆圈出端点for (int i = 0; i < nsize; i++){circle(temp, P[i], 10, Scalar(0, 255, 0));}Mat circleadd;addWeighted(temp, 1, colorImage, 1, 0, circleadd);imwrite("端点.png",circleadd);namedWindow("circleadd", cv::WINDOW_NORMAL);imshow("circleadd", circleadd);waitKey(0);}
#pragma region//8邻域提取端点
vector<Point> breakImage(Mat& src)
{vector<Point> pointxy;Point ptPoint;Size size = src.size();int nSize;for (int i = 1; i < size.height - 1; i++){uchar* dataPre = src.ptr<uchar>(i - 1);uchar* dataCurr = src.ptr<uchar>(i);uchar* dataNext = src.ptr<uchar>(i + 1);for (int j = 1; j < size.width - 1; j++){//  p9 p2 p3    //  p8 p1 p4    //  p7 p6 p5int p1 = dataCurr[j];if (p1 != 255) continue;int p2 = dataPre[j];int p3 = dataPre[j + 1];int p4 = dataCurr[j + 1];int p5 = dataNext[j + 1];int p6 = dataNext[j];int p7 = dataNext[j - 1];int p8 = dataCurr[j - 1];int p9 = dataPre[j - 1];if (p1 == 255){if ((p2 + p3 + p4 + p5 + p6 + p7 + p8 + p9) == 255){ptPoint.x = j;ptPoint.y = i;pointxy.push_back(ptPoint);printf("端点的坐标为:x:%d y:%d\n", j, i);}}}}nSize = (int)pointxy.size();printf("提取端点个数:%d\n", nSize);return pointxy;
}
#pragma endregion

三、结果展示

在这里插入图片描述
在这里插入图片描述

四、参考链接

[1] 八邻域断点检测
[2] OpenCV 八领域断点检测+断点缺陷修补

相关文章:

OpenCV——八邻域断点检测

目录 一、理论基础1、八邻域2、断点检测 二、代码实现三、结果展示四、参考链接 OpenCV——八邻域断点检测由CSDN点云侠原创&#xff0c;爬虫自重。如果你不是在点云侠的博客中看到该文章&#xff0c;那么此处便是不要脸的爬虫。 一、理论基础 1、八邻域 图1 八邻域示意图 图…...

leetcode238:除自身以外数组的乘积

文章目录 1.使用除法&#xff08;违背题意&#xff09;2.左右乘积列表3.空间复杂度为O(1)的方法 在leetcode上刷到了这一题&#xff0c;一开始并没有想到好的解题思路&#xff0c;写篇博客再来梳理一下吧。 题目要求&#xff1a; 不使用除法在O(n)时间复杂度内 1.使用除法&am…...

VTK开发调试环境下载(VTK开发环境一步到位直接开发,无需自己配置编译 VS2017+Qt5.12.10+VTK)

一、无与伦比的优势 直接下载代码就可以调试的VTK代码仓库。 二、资源制作原理 这个资源根据VTK源码 编译出动态库文件 pdb lib dll 文件&#xff08; x64 debug &#xff09; 并将这两者同时放在一个代码仓库里&#xff0c;下载就能用。 三、使用方法&#xff08;vtk-so…...

【JAVA】在 Queue 中 poll()和 remove()有什么区别

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a;JAVA ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 前言 正文 poll() 方法&#xff1a; remove() 方法&#xff1a; 区别总结&#xff1a; 结语 我的其他博客 前言 在Java的Queue接口中&…...

常用Java代码-Java中的Optional类和null安全编程

在Java中&#xff0c;Optional 是一个可以为null的容器对象。如果值存在则isPresent()方法返回true。调用get()方法会返回值&#xff0c;如果值为null则抛出NullPointerException。以下是一个详细的代码详解。 在之前的Java版本中&#xff0c;程序员需要手动检查是否为null&am…...

android.os.NetworkOnMainThreadException

问题 android.os.NetworkOnMainThreadException详细问题 核心代码如下&#xff1a; import android.os.Bundle;import androidx.appcompat.app.AppCompatActivity;import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import ja…...

Java生成四位数随机验证码

引言&#xff1a; 我们生活中登录的时候都要输入验证码&#xff0c;这些验证码是为了增加注册或者登录难度&#xff0c;减少被人用脚本疯狂登录注册导致的一系列危害&#xff0c;减少数据库的一些压力。 毕竟那些用脚本生成的账号都是垃圾账号 本次实践&#xff1a;生成这样的…...

编程探秘:Python深渊之旅-----数据可视化(八)

客户提出了对数据报告和图表的具体要求&#xff0c;这使得团队需要快速掌握数据可视化的技巧。派超决定深入了解 Python 中的数据可视化工具。 派超&#xff08;兴奋地&#xff09;&#xff1a;我们有机会做些真正酷炫的数据报告了&#xff01;我听说 Python 有很棒的图表库。…...

上海亚商投顾:创业板指冲高回落 光伏、航运股逆势走强

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 一.市场情绪 沪指1月12日冲高回落&#xff0c;创业板指午后跌近1%。北证50指数跌超6%&#xff0c;倍益康、华信永道、众诚科…...

Python3 中常用字符串函数介绍

介绍 Python 中有几个与 字符串数据类型相关的内置函数。这些函数让我们能够轻松修改和操作字符串。我们可以将函数视为在代码元素上执行的操作。内置函数是在 Python 编程语言中定义的&#xff0c;并且可以随时供我们使用的函数。 在本教程中&#xff0c;我们将介绍在 Pytho…...

Python - 深夜数据结构与算法之 AVL 树 红黑树

目录 一.引言 二.高级树的简介 1.树 2.二叉树 3.二叉搜索树 4.平衡二叉树 三.AVL 树 ◆ 插入节点 ◆ 左旋 ◆ 右旋 ◆ 左右旋 ◆ 右左旋 ◆ 一般形式 ◆ 实际操作 ◆ 总结 四.红黑树 ◆ 概念 ◆ 示例 ◆ 对比 五.总结 一.引言 前面我们介绍了二叉树、二叉…...

Zookeeper使用详解

介绍 ZooKeeper是一个分布式的&#xff0c;开放源码的分布式应用程序协调服务&#xff0c;是Google的Chubby一个开源的实现&#xff0c;是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件&#xff0c;提供的功能包括&#xff1a;配置维护、域名服务、分布…...

C#属性(Property)

文章目录 一、C#属性&#xff08;Property&#xff09;&#xff1f;二、属性的用法总结 一、C#属性&#xff08;Property&#xff09;&#xff1f; C#属性&#xff08;Property&#xff09;是一种访问器&#xff08;accessor&#xff09;&#xff0c;用于封装一个类的字段&…...

在docker中搭建部署clickhouse

因需要给网关日志拉取并存储供数据分析师分析&#xff0c;由于几十个项目的网关请求数量很大&#xff0c;放在mysql不合适&#xff0c;MongoDB不适合分析&#xff0c;于是准备存放在clickhouse&#xff0c;clickhouse对于读写支持也比较友好&#xff0c;说干就干 1、在服务器中…...

第九部分 使用函数 (三)

目录 一、文件名操作函数 1、dir 2、notdir 3、suffix 4、basename 5、addsuffix 6、addprefix 7、join 一、文件名操作函数 下面我们要介绍的函数主要是处理文件名的。每个函数的参数字符串都会被当做一个或是 一系列的文件名来对待。 1、dir $(dir <names..>…...

基础命令继续

1&#xff1a;创建目录命令 mkdir命令 注意&#xff1a;创建文件夹需要修改权限&#xff0c;请确保操作均在HOME目录内&#xff0c;不要在Home外操作&#xff0c;涉及到权限问题&#xff0c;HOME外无法识别 小结&#xff1a; 练习: 2&#xff1a;touch创建文件 2&#xff1a;c…...

uni-app做A-Z排序通讯录、索引列表

上图是效果图&#xff0c;三个问题 访问电话通讯录&#xff0c;拿数据拿到用户的联系人数组对象&#xff0c;之后根据A-Z排序根据字母索引快速搜索 首先说数据怎么拿 - 社区有指导https://ask.dcloud.net.cn/question/64117 uniapp 调取通讯录 // #ifdef APP-PLUSplus.contac…...

Codeforces Round 768 (Div. 1) D. Flipping Range(思维题 等价类性质 dp)

题目 思路来源 官方题解 洛谷题解 题解 可操作的最短区间长度肯定是gcd&#xff0c;记为g&#xff0c;然后考虑如何dp 考虑g个等价类&#xff0c;每个等价类i,ig,i2*g,... 每次翻转长度为g的区间&#xff0c;会同时影响到g个等价类总的翻转的奇偶性&#xff0c; 性质一&…...

springboot集成kafka消费数据

springboot集成kafka消费数据 文章目录 springboot集成kafka消费数据1.引入pom依赖2.添加配置文件2.1.添加KafkaConsumerConfig.java2.2.添加KafkaIotCustomProperties.java2.3.添加application.yml配置 3.消费者代码 1.引入pom依赖 <dependency><groupId>org.spri…...

单例模式---JAVA

目录 “饿汉”模式 完整代码 “懒汉”模式 完整代码 单例模式&#xff1a;保证某个类在程序中只存在唯一一份实例, 而不会创建出多个实例。 单例模式可以通过实例创建的时间来分为两种&#xff1a;“饿汉”和“懒汉”模式。 “饿汉”模式 所谓的“饿汉”模式实则就是在类…...

基于Petals分布式网络的大语言模型聊天应用后端部署与API调用实战

1. 项目概述&#xff1a;一个基于分布式协作的大语言模型聊天应用后端最近在折腾大语言模型应用的时候&#xff0c;发现了一个挺有意思的项目&#xff1a;chat.petals.dev。这不仅仅是一个开源的聊天机器人Web应用&#xff0c;更关键的是&#xff0c;它背后连接着一个名为Petal…...

如何在C++中使用标准库的智能指针

使用标准库的智能指针* 注意&#xff0c;在使用数组的时候需要使用数组的特化版本。#include <iostream> #include <memory>std::unique_ptr<char[]> division(int x, int y) {std::unique_ptr<char[]> sp(new char[100]{});if (y 0) {throw "Pl…...

从专利大国到专利强国:企业全球专利布局策略与实战指南

1. 从“专利大国”到“专利强国”&#xff1a;一场关于价值与布局的深度思考最近翻看一些行业旧闻&#xff0c;2016年EE Times上那篇关于中国专利“不出海”的讨论&#xff0c;现在读来依然很有嚼头。文章核心就一句话&#xff1a;根据世界知识产权组织&#xff08;WIPO&#x…...

校企合作奖学金与实习计划:破解半导体硬件人才困境的务实路径

1. 行业人才困境的根源与一个被忽视的解法最近和几位在半导体、硬件设计领域摸爬滚打了十几年的老朋友聊天&#xff0c;话题不出意外地又绕回了“招人难”。从深圳的硬件创业公司&#xff0c;到上海的外企研发中心&#xff0c;再到西安的老牌研究所&#xff0c;几乎所有人都在抱…...

10个必备的Solidity安全技巧:Secureum-mind_map实践经验分享

10个必备的Solidity安全技巧&#xff1a;Secureum-mind_map实践经验分享 【免费下载链接】secureum-mind_map Central Repository for the Epoch 0 coursework and quizzes. Contains all the content, cross-referenced and linked. 项目地址: https://gitcode.com/gh_mirr…...

开发者知识管理工具CodingIT:架构设计与应用实践

1. 项目概述&#xff1a;一个面向开发者的“一站式”知识管理工具最近在整理个人技术笔记和项目文档时&#xff0c;我发现自己陷入了典型的“信息碎片化”困境&#xff1a;代码片段散落在Gist、笔记软件、本地文件甚至聊天记录里&#xff1b;项目文档要么是简陋的README&#x…...

RAG:解锁大语言模型新能力,告别幻觉与知识陈旧!

本文深入解析了检索增强生成&#xff08;RAG&#xff09;架构&#xff0c;旨在解决传统大语言模型因知识局限而产生的幻觉、陈旧等问题。RAG通过在生成答案前检索外部知识库&#xff0c;提升回答的准确性和时效性。文章详细介绍了RAG的架构类型&#xff08;如无微调、检索器微调…...

如何让PT下载像点外卖一样简单?3个场景教你玩转PT-Plugin-Plus

如何让PT下载像点外卖一样简单&#xff1f;3个场景教你玩转PT-Plugin-Plus 【免费下载链接】PT-Plugin-Plus PT 助手 Plus&#xff0c;为 Microsoft Edge、Google Chrome、Firefox 浏览器插件&#xff08;Web Extensions&#xff09;&#xff0c;主要用于辅助下载 PT 站的种子。…...

解锁iPad生产力:一文详解连接Windows作副屏的实用方案

1. 为什么需要把iPad变成Windows副屏&#xff1f; 作为一名常年奔波在客户现场的技术顾问&#xff0c;我的背包里永远装着三样东西&#xff1a;Windows笔记本、iPad和充电宝。有次在高铁上赶方案&#xff0c;盯着13寸的笔记本屏幕同时开PS修图、写文档和查资料&#xff0c;差点…...

深度测试在2D渲染中的性能优化实践

1. 深度测试在2D渲染中的创新应用在移动设备上&#xff0c;2D应用和游戏的渲染性能优化一直是个棘手的问题。传统2D渲染采用简单的后向前&#xff08;back-to-front&#xff09;绘制顺序来处理透明混合&#xff0c;这种方法虽然直观&#xff0c;但存在严重的过度绘制&#xff0…...