opencvsharp图像处理_腐蚀与膨胀,击中击不中变换(3)
膨胀:dilate为核B对核A做卷积时,核B覆盖区域的像素最大值提取
腐蚀:erode 为核B对核A做卷积时,核B覆盖区域的像素最小值提取
击中击不中变换:有两个不相交集合B={B1,B2},用B1去腐蚀X,然后用B2去腐蚀X的补集,得到的结果相减就是击中击不中变换。
腐蚀和膨胀公式:
击中击不中变换公式:
腐蚀和膨胀opencvsharp程序
//定义原图路径Mat panda = new Mat("template2.jpg");//显示原图//Cv2.ImShow("原图",panda);PICPRO.DispImage(panda, pictureBox1);int size = 5;//定义卷积核 矩形,5*5的核 核的锚点Mat stu = Cv2.GetStructuringElement(MorphShapes.Rect,new OpenCvSharp.Size(size,size),new OpenCvSharp.Point(-1,-1));//定义一个膨胀输出mat类型Mat dil = new Mat();//膨胀 输入图 输出图 卷积核B 锚点位置,应用膨胀次数Cv2.Dilate(panda, dil, stu, new OpenCvSharp.Point(-1, -1), 1);//定义一个腐蚀输出mat类型Mat erode = new Mat();//输入图像 输出图像 卷积核 锚点位置 腐蚀次数Cv2.Erode(panda,erode,stu,new OpenCvSharp.Point(-1,-1),1);Cv2.ImShow("膨胀",dil);Cv2.ImShow("腐蚀", erode);Cv2.WaitKey();
0黑,255白
腐蚀erode : 是黑色的扩张,向0的扩张
原图
膨胀dilate : 是白色的扩张,向255的扩张
开运算: 先腐蚀在膨胀,可以剔除小白点
闭运算: 先膨胀在腐蚀,可以剔除小黑点
击中击不中变换实现代码:
//自建图byte[] image = new byte[64]{0, 0, 0, 0, 0, 0, 0, 0,0, 255, 255, 255, 0, 0, 0, 255,0, 255, 255, 255, 0, 0, 0, 0,0, 255, 255, 255, 0, 255, 0, 0,0, 0, 255, 0, 0, 0, 0, 0,0, 0, 255, 0, 0, 255, 255, 0,0, 255, 0, 255, 0, 0, 255, 0,0, 255, 255, 255, 0, 0, 0, 0};Mat input_image = new Mat(8, 8, MatType.CV_8UC1, image);Console.WriteLine("自建图" + Cv2.Format(input_image));input_image.SetArray<Byte>(image);//目标图定义Mat binary = new Mat();Mat binaryNot = new Mat();Mat binaryNot1 = new Mat();Mat binaryOut = new Mat();Mat HitMiss = new Mat();//原图Cv2.Threshold(input_image, binary, 0, 255, ThresholdTypes.Otsu);Mat stu = Cv2.GetStructuringElement(MorphShapes.Cross,new OpenCvSharp.Size(3, 3), new OpenCvSharp.Point(-1, -1));Console.WriteLine("STU" + Cv2.Format(stu));Cv2.MorphologyEx(binary, HitMiss, MorphTypes.HitMiss, stu);Cv2.Resize(HitMiss, HitMiss, new OpenCvSharp.Size(), 50, 50, InterpolationFlags.Nearest);Cv2.ImShow("直接用输出的结果", HitMiss);//原图的补集Cv2.BitwiseNot(binary, binaryNot);Cv2.Resize(binaryNot, binaryNot1, new OpenCvSharp.Size(), 50, 50, InterpolationFlags.Nearest);// Cv2.ImShow("原图", binary);Cv2.ImShow("原图补集", binaryNot1);//构建核Abyte[] kernelA = new byte[9] {0,1,0,1,1,1,0,1,0 };Mat StuA = new Mat(3, 3, MatType.CV_8UC1, kernelA);StuA.SetArray<byte>(kernelA);Console.WriteLine("核A"+ Cv2.Format(StuA));//构建核Bbyte[] kernelB = new byte[9] { 1, 0, 1, 0, 0, 0, 1, 0, 1 };Mat StuB = new Mat(3, 3, MatType.CV_8UC1);StuB.SetArray<byte>(kernelB);Console.WriteLine("核B"+ Cv2.Format(StuB));//用核A去腐蚀原图Cv2.MorphologyEx(binary, binary, MorphTypes.Erode, StuA);Console.WriteLine("核A去腐蚀原图" + Cv2.Format(binary));//用核B去腐蚀原图补集Cv2.MorphologyEx(binaryNot, binaryNot, MorphTypes.Erode, StuB);Console.WriteLine("核B去腐蚀原图补集" + Cv2.Format(binaryNot));//交集Cv2.Subtract(binary, binaryNot, binaryOut);Cv2.Resize(binaryOut, binaryOut, new OpenCvSharp.Size(), 50, 50, InterpolationFlags.Nearest);Cv2.ImShow("结果", binaryOut);Cv2.MoveWindow("结果", 0, 0);int rate = 50;StuB = (StuB ) * 255;StuA = (StuA ) * 255;Cv2.Resize(StuA, StuA, new OpenCvSharp.Size(), rate, rate, InterpolationFlags.Nearest);Cv2.ImShow("StuA", StuA);Cv2.MoveWindow("StuA", 0, 0);Cv2.Resize(StuB, StuB, new OpenCvSharp.Size(), rate, rate, InterpolationFlags.Nearest);Cv2.ImShow("StuB", StuB);Cv2.MoveWindow("StuB", 0, 0);Cv2.Resize(input_image, input_image, new OpenCvSharp. Size(), rate, rate, InterpolationFlags.Nearest);Cv2.ImShow("原图", input_image);Cv2.MoveWindow("原图", 0, 0);
自建图:
//自建核
//用接口和代码分别实现的结果
//数据的计算
opencvsharp图像处理_腐蚀与膨胀,击中击不中变换(3)相关推荐
- MATLAB--数字图像处理 击中击不中变换
击中击不中变换 原理 击中击不中变换(HMT)需要两个结构元素B1和B2,合成一个结构元素对B=(B1,B2) 一个用于探测图像内部,作为击中部分;另一个用于探测图像外部,作为击不中部分.显然,B1和 ...
- 数字图像处理 击中击不中变换
参考链接 目的: 击中击不中变换就是在A图像上找到和B图像一致的那块区域,举个例子就是:你拿着一张A图片的一部分,你需要在A图像上找到这张图片在A图片上的位置在哪(注意,这里找到的位置,都是一个点,也 ...
- 【youcans 的 OpenCV 例程 200 篇】120. 击中-击不中变换
欢迎关注 『youcans 的 OpenCV 例程 200 篇』 系列,持续更新中 欢迎关注 『youcans 的 OpenCV学习课』 系列,持续更新中 [youcans 的 OpenCV 例程 2 ...
- 详解图像形态学中的击中击不中变换操作(HMT),并提醒大家OpenCV4中的击中击不中变换操作是有问题的
大家看这篇博文前可以先看一看下面这篇博文,下面这篇博文是这篇博文的基础: 详解图像形态学操作之图形的腐蚀和膨胀的概念和运算过程,并利用OpenCV的函数erode()和函数dilate()对图像进行腐 ...
- 区域填充与击中击不中变换
1,区域填充 %区域填充 clear,clc,close all; BW1 = logical([1 0 0 0 0 0 0 0; 1 1 1 1 1 0 0 0;1 0 0 0 0 0 1 0; 1 ...
- 形态学 - 击中-击不中变换
目录 1. HMT 介绍 2. 代码实现 1. HMT 介绍 HMT全称是Hit miss transformation --- 击中 击不中变换,这里我们只对二值图像做处理 二值图像是图像的灰度值只 ...
- 击中击不中变换的作用理解
学习形态学变换的时候,看到击中击不中变换一直百思不得其解,虽然他的定义写的很清楚明白,但是不知道具体是干嘛用的,按照自己的理解写了一个matlab小程序来试试. 1.击中击不中变换是形态学形状检测的基 ...
- 二值形态学之击中击不中变换
定义 应用 物体识别 细化 击中击不中变换(Hit Miss Transform ,HMT),是通过同时探测图像的内部和外部,进而获取更多的内外标记,体现更多信息的一个方法.他的应用有很多,特别是在图 ...
- OpenCV实现击中击不中变换和形态学细化
1 击中击不中变换 1.1 HMT概述 形态学Hit-or-Miss是形状检测基本工具,只要结构元设置得当,就可以检测一些基本的形状图案,HMT变换只能作用于二值图像,结构元(核)元素值由0.1.-1 ...
最新文章
- gson解析mysql城市json数据_Gson解析复杂的json数据
- WinDbg+SOS:Web服务器High CPU Hang(100%)实例分析
- java 学生信息的增删改查_学生信息的增删改查(java)
- php订单模块解耦,PHP快速使用RabbitMQ实现项目中部分业务的解耦
- Swift--基本数据类型(二)
- mysql索引有字符集_07. 类型、字符集、引擎和索引
- golang mysql加锁_使用golang实现类InnoDB数据行锁效果
- php获取每月的星期天,php计算一月中有多少个周末
- Google 发布其非 Linux 系操作系统 Fuchsia 说明书!
- 前端 JavaScript 复制粘贴的奥义——Clipboard 对象概述
- tortoisegit 代码的回滚方式 --两种
- QSetting::Scope
- Conda 的 yml 文件 Conda/PIP 国内镜像源的添加
- 用excel将有规律的数据随机打乱
- 知识图谱(Knowledge Graph)
- cad多段线画圆弧方向_cad弧形多线(cad多段线怎么画弧线)
- CodeReview中常见缩写
- 华为防火墙配置流量根据链路权重负载分担
- 统计学常识笔记整理(二)
- kubernete编排技术五:DaemonSet