C# 查找迷宫路径

1.导入图像,并且将图像转灰度

using var img = new Image<Bgr, byte>(_path);
using var grayImg = img.Convert<Gray, byte>();

2.自动二值化图像

using var inputGrayOut = new Image<Gray, byte>(grayImg.Size);
// 计算OTSU阈值
var threshold = CvInvoke.Threshold(grayImg, inputGrayOut, 0, 255, ThresholdType.BinaryInv | ThresholdType.Otsu);
// 二值化图像
using var binaryImage = inputGrayOut.ThresholdBinary(new Gray(threshold), new Gray(255));

 

3.图像裁剪,只留下迷宫区域,如果不裁剪会出现最外围的路径

 using var dilated2 = new Mat();
CvInvoke.Dilate(binaryImage, dilated2, kernel, new Point(-1, -1), trackBar2.Value, BorderType.Default, new MCvScalar());
using Mat hierarchy3 = new Mat();
using VectorOfVectorOfPoint contours3 = new VectorOfVectorOfPoint();
CvInvoke.FindContours(dilated2, contours3, hierarchy3, RetrType.External, ChainApproxMethod.ChainApproxSimple);
using var binaryImage2=binaryImage.Copy(CvInvoke.BoundingRectangle(contours3[0]));

4.查找轮廓,并绘制在全黑图像上

using VectorOfVectorOfPoint contours = new VectorOfVectorOfPoint();
using Mat hierarchy = new Mat();
CvInvoke.FindContours(binaryImage2, contours, hierarchy, RetrType.External, ChainApproxMethod.ChainApproxSimple);
// 绘制在全黑图像上
using var draw = new Image<Gray, byte>(binaryImage2.Size);
CvInvoke.DrawContours(draw, contours, 0, new Bgr(255, 255, 255).MCvScalar,1);

 

5.膨胀

 using var dilated = new Mat();
CvInvoke.Dilate(draw, dilated, kernel, new Point(-1, -1), trackBar2.Value, BorderType.Default, new MCvScalar());

 

6.腐蚀

 using var eroded = new Mat();CvInvoke.Erode(dilated, eroded, kernel, new Point(-1, -1), trackBar2.Value, BorderType.Default, new MCvScalar());

 

7.膨胀腐蚀相减

 using var diff = new Mat();
CvInvoke.AbsDiff(dilated, eroded, diff);

 

8.在差异图diff中查找轮廓,并在原图上绘制轮廓(寻找最大边框绘画)

 using VectorOfVectorOfPoint contours2 = new VectorOfVectorOfPoint();using var hierarchy2 = new Mat();
//CvInvoke.CvtColor(diff, diff, ColorConversion.Bgr2Gray);CvInvoke.FindContours(diff, contours2, hierarchy2, RetrType.External, ChainApproxMethod.ChainApproxSimple);double maxArea = 0;int maxAreaIndex = 0;for (int i = 0; i < contours2.Size; i++){double area = CvInvoke.ContourArea(contours2[i]);if (area > maxArea){maxArea = area;maxAreaIndex = i;}}CvInvoke.DrawContours(img, contours2, maxAreaIndex, new Bgr(0, 0, 255).MCvScalar, 2);

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

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

相关文章

技师学院物联网实训室建建设方案

一、概述 1.1专业背景 物联网&#xff08;Internet of Things&#xff09;被称为继计算机、互联网之后世界信息产业第三次浪潮&#xff0c;它并非一个全新的技术领域&#xff0c;而是现代信息技术发展到一定阶段后出现的一种聚合性应用与技术提升&#xff0c;是随着传感网、通…

Echarts 旭日图的详细配置过程

文章目录 旭日图 简介配置过程简易示例 旭日图 简介 Echarts旭日图是一种数据可视化图表类型&#xff0c;用于展示层次关系数据的分布情况。旭日图通过不同的环形区域和扇形区域来表示数据的层次和大小关系&#xff0c;从而形成一个太阳的形状&#xff0c;因此得名旭日图。 E…

【深度学习】 Python 和 NumPy 系列教程(十五):Matplotlib详解:2、3d绘图类型(1):线框图(Wireframe Plot)

目录 一、前言 二、实验环境 三、Matplotlib详解 1、2d绘图类型 2、3d绘图类型 0. 设置中文字体 1. 线框图&#xff08;Wireframe Plot&#xff09; 一、前言 Python是一种高级编程语言&#xff0c;由Guido van Rossum于1991年创建。它以简洁、易读的语法而闻名&#xff0…

postman连接websocket, 建立连接、聊天测试(v8.5.1)

1. postman v8.5版本 以上支持 websocket。 2. 选择websocket请求模块File - New... 3. WebSocketServer.java import org.springframework.stereotype.Component; import javax.websocket.*; import javax.websocket.server.PathParam; import javax.websocket.server.Server…

巨人互动|Google海外户Google+有什么用途

Google是Google推出的一项社交网络服务&#xff0c;类似于Facebook和Twitter。它为用户提供了一个分享和交流的平台&#xff0c;具有许多不同的用途。 首先&#xff0c;Google可以让用户轻松地与朋友、家人、同事和其他人建立联系。通过添加他人为好友或加入共同兴趣的群组&am…

linux环境部署jmeter并执行测试

下载jmeter和jdk jmeter官网和java-jdk官网下载压缩包文件 jmeter下载地址&#xff1a;点此下载 jmeter Apache JMeter - Download Apache JMeter java-jdk下载地址&#xff1a;点此下载 jdk Java Downloads | Oracle 安装包根据Linux配置进行选择。 上传文件到Linux并解压文…

IDEA 打包MapReduce程序到集群运行的两种方式以及XShell和Xftp过期的解决

参考博客 【MapReduce打包成jar上传到集群运行】http://t.csdn.cn/2gK1d 【Xshell7/Xftp7 解决强制更新问题】http://t.csdn.cn/rxiBG IDEA打包MapReduce程序&#xff08;方式一&#xff09;【轻量级打包】 这里的打包是打包整个项目&#xff0c;后期等学会怎么打包单个指定…

解决mybatis-plus不能俩表联查分页之手动写分页

public class MyPageHelper {// 调用pageInfo插件内的方法 开启分页 需要传入一个起始页的值和每页显示的条数public static void startPage(PageRequest pageRequest) {PageHelper.startPage(pageRequest.getPageNum(),pageRequest.getPageSize());}// 封装结果集public stati…

七天学会C语言-第一天(C语言基本语句)

一、固定格式 这个是C程序的基本框架&#xff0c;需要记住&#xff01;&#xff01;&#xff01; #include<stdio.h>int main(){return 0; }二、printf 语句 简单输出一句C程序&#xff1a; #include<stdio.h> int main(){printf("大家好&#xff0c;&quo…

9月15日作业

Qt代码 #include "mywnd.h"//构造函数的定义 mywnd::mywnd(QWidget *parent): QWidget(parent) //显性调用父类的有参构造完成对子类从父类继承下来成员的初始化工作 {//窗口设置this->resize(QSize(500, 433));this->setWindowTitle("Widget&quo…

一分钟带你快速了解Prettier+配置指南

什么是 Prettier prettier是一个代码格式化工具&#xff0c;它可以支持JS/JSX/TS/Flow/JSON/CSS/LESS等文件格式。 安装依赖到开发环境 //npm npm install --save-dev --save-exact prettier //yarn yarn add --dev --exact prettier根目录下创建.prettierrc.js 点击查看官…

无涯教程-JavaScript - ASIN函数

描述 ASIN函数返回给定数字的反正弦或反正弦,并返回以弧度表示的Angular,介于-π/2和π/2之间。 语法 ASIN (number)争论 Argument描述Required/OptionalNumberThe sine of the angle you want and must be from -1 to 1.Required Notes 如果您希望ASIN函数返回的Angular以…

XSS入门 XSS Challenges

level1(直接注入) <script>alert(xss)</script>level2(双引号闭合标签) 测试 <sCr<ScRiPt>IPT>OonN"\/(hrHRefEF)</sCr</ScRiPt>IPT>发现<>"被转换&#xff0c;构造新的语句 "><script>alert(/xss/)</…

基于永磁同步发电机的风力发电系统研究(Simulink实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

[Linux入门]---搭建Linux环境

1.Linux环境的搭建方式 使用Linux操作系统的三种途径&#xff1a; 1.直接安装在物理机上&#xff0c;但是由于 Linux 桌面使用起来非常不友好&#xff0c;不推荐。 2.使用虚拟机软件&#xff0c;将 Linux 搭建在虚拟机上&#xff0c;但是由于当前的虚拟机软件(如 VMWare 之类的…

python-爬虫-requests

安装模块 pip install requests在jupyter notebook里使用ShiftTab查看 requests requests库的主要方法 方法解释requests.requset()构造一个请求&#xff0c;支持以下各种方法requests.get()获取HTML的主要方法requests.head()获取HTML头部信息requests.post()向HTML网页提…

CNN(八):Inception V1算法实战与解析

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客 &#x1f356; 原作者&#xff1a;K同学啊|接辅导、项目定制 1 Inception V1 Inception v1论文 1.1 理论知识 GoogLeNet首次出现在2014年ILSVRC比赛中获得冠军。这次的版本通常称其为Inception V1。…

基础版本抖音(字节跳动青训)

抖音基础版&#xff08;字节跳动青训项目&#xff09; 一、项目介绍 本抖音项目是基于grpc通讯协议开发的高性能微服务&#xff0c;不仅使用gin作为业务层框架&#xff0c;gorm框架作为持久层框架&#xff0c;还使用预编译sql防止sql注入&#xff0c;同时该项目结合连接池技术…

【C++】类和对象(中下)

前言&#xff1a; 上一篇文章&#xff0c;我们了解了类的默认成员函数——构造函数、析构函数、拷贝构造函数&#xff0c;这篇我们让我们接着了解。 一、赋值运算符重载&#xff1a; 1.运算符重载&#xff1a; C为了增强代码的可读性引入了运算符重载&#xff0c;运算符重载是…

【Linux从入门到精通】多线程 | 线程互斥(互斥锁)

上篇文章我们对线程 | 线程介绍&线程控制介绍后&#xff0c;本篇文章将会对多线程中的线程互斥与互斥锁的概念进行详解。同时结合实际例子解释了可重入与不被重入函数、临界资源与临界区和原子性的概念。希望本篇文章会对你有所帮助。 文章目录 引入 一、重入与临界 1、1 可…