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

C# OpenCvSharp 实现迷宫解密

效果

项目

代码

using OpenCvSharp;
using System;
using System.Drawing;
using System.Windows.Forms;namespace OpenCvSharp_实现迷宫解密
{public partial class Form1 : Form{public Form1(){InitializeComponent();}private void Form1_Load(object sender, EventArgs e){pictureBox1.Image = new Bitmap("test.png");}private void button1_Click(object sender, EventArgs e){//读取图片Mat src = Cv2.ImRead("test.png");//BGR2GRAYMat gray = new Mat();Cv2.CvtColor(src, gray, ColorConversionCodes.BGR2GRAY);//Cv2.ImShow("gray", gray);//1、对图像进行二值化处理//反转 产生一个二进制的图像与白色的墙壁和黑色的背景Mat thresh = new Mat();Cv2.Threshold(gray, thresh, 127, 255, ThresholdTypes.BinaryInv);// Cv2.ImShow("thresh", thresh);//2、对二值化后的图像进行轮廓检测并标注OpenCvSharp.Point[][] contours;HierarchyIndex[] hierarchly;Cv2.FindContours(thresh, out contours, out hierarchly, RetrievalModes.External, ContourApproximationModes.ApproxNone);Mat dc = Mat.Zeros(src.Size(), MatType.CV_8UC1);Cv2.DrawContours(dc, contours, 0, new Scalar(255, 255, 255), 6);//3、对图像阈值进行处理Cv2.Threshold(dc, thresh, 240, 255, ThresholdTypes.Binary);//Cv2.ImShow("thresh2", thresh);//4、对图像进行扩展操作/*扩张是数学形态领域的两个基本操作者之一,另一个是侵蚀。它通常应用于二进制图像,但有一些版本可用于灰度图像。操作者对二进制图像的基本效果是逐渐扩大前景像素区域的边界(通常为白色像素)。因此,前景像素的面积大小增加,而这些区域内的孔变小。*/Mat kernel = Mat.Ones(10, 10, MatType.CV_8UC1);Mat dilation = new Mat();Cv2.Dilate(thresh, dilation, kernel);//Cv2.ImShow("dilation", dilation);//5、对图像进行侵蚀操作/*侵蚀是第二个形态运算符。它也适用于二进制图像。操作者对二进制图像的基本效果是消除前景像素区域的边界(通常为白色像素)。因此,前景像素的面积缩小,并且这些区域内的孔变大。*/Mat erosion = new Mat();Cv2.Erode(dilation, erosion, kernel);//Cv2.ImShow("erosion", erosion);//6、分迷宫通道找出路径Mat diff = new Mat();Cv2.Absdiff(dilation, erosion, diff);Mat[] channels = Cv2.Split(src);channels[0] &= ~diff;channels[1] &= ~diff;channels[2] |= diff;Mat dst = new Mat();Cv2.Merge(channels, dst);//Cv2.ImShow("solution", dst);pictureBox2.Image = new Bitmap(dst.ToMemoryStream());}}
}

Demo下载

http://www.lryc.cn/news/184833.html

相关文章:

  • 趣味工具箱小程序源码
  • 互联网Java工程师面试题·Redis 篇·第二弹
  • FreeRTOS入门教程(信号量的概念及API函数使用)
  • 简易版Pycharm(2023)+Conda开发环境配置教程
  • 深入浅出,SpringBoot整合Quartz实现定时任务与Redis健康检测(二)
  • 小谈设计模式(22)—单例模式
  • 华为OD机考算法题:分班
  • 【gcc】RtpTransportControllerSend学习笔记 3:gcc
  • CSP-J第二轮试题-2019年-3题
  • 数据库:Hive转Presto(三)
  • 【AI视野·今日Robot 机器人论文速览 第四十八期】Thu, 5 Oct 2023
  • 学信息系统项目管理师第4版系列20_风险管理
  • 卷积神经网络的发展历史-VGG
  • qt解决信号和槽连接时传递额外参数的问题
  • 『力扣每日一题14』:消失的数字
  • 【b站韩顺平 快速学Java课】Java的JDK8(包括公共JRE8)安装教程 总结
  • Spark 弹性分布式数据集 RDD
  • 电脑被删除的文件怎么恢复?2023年数据恢复方法分享
  • 李宏毅 2022机器学习 HW3 boss baseline 上分记录
  • SpringBatch适配不同数据库的两种方法
  • 【ARM CoreLink 系列 5 -- CI-700 控制器介绍 】
  • 找不到msvcp140_1.dll怎么办,快速解决msvcp140_1.dll问题的方法分享
  • 华为云云耀云服务器L实例评测|部署私有网盘 Nextcloud
  • vue3中使用插件vite-plugin-svg-icons
  • 面试题20231008
  • 2023全新小红书图集和视频解析去水印网站源码
  • 2023去水印小程序源码修复版-前端后端内置接口+第三方接口
  • 鸿蒙手表开发之使用adb命令安装线上包
  • 华为OD机试 - 计算最大乘积(2022Q4 100分)
  • 安卓RecycleView包含SeekBar点击列表底部圆形阴影处理