首页 > 编程语言 >C#+OpenCV基础(十二)_图片形态学计算

C#+OpenCV基础(十二)_图片形态学计算

时间:2024-07-10 17:18:50浏览次数:13  
标签:运算 dstMet C# element 形态学 OpenCV 腐蚀 new Mat

1、膨胀

/// <summary>
/// 膨胀
/// </summary>
/// <param name="mat">图片</param>
/// <param name="element">用于膨胀的结构内核;如果element=new Mat(),则使用3x3矩形结构化元素</param>
/// <param name="anchor">锚在元素中的位置。默认值(-1,-1)表示锚点位于元素中心</param>
/// <param name="iterations">应用膨胀的次数。[默认情况下为1]</param>
/// <param name="borderType">边缘像素的外推类型</param>
/// <param name="borderValue">在边缘为常量的情况下的边缘值</param>
/// <returns></returns>
public static Mat Dilate(Mat mat, InputArray? element, Point? anchor = null, int iterations = 1,
    BorderTypes borderType = BorderTypes.Constant, Scalar? borderValue = null)
{
    Mat dstMet = new Mat();

    // var element = Cv2.GetStructuringElement(MorphShapes.Rect, new OpenCvSharp.Size(1, 1));
    // 膨胀Cv2.Dilate
    Cv2.Dilate(mat, dstMet, element, anchor, iterations, borderType, borderValue);
    return dstMet;
}

2、腐蚀

/// <summary>
/// 腐蚀
/// </summary>
/// <param name="mat">图片</param>
/// <param name="element">用于侵蚀的结构内核;如果element=new Mat(),则使用3x3矩形结构化元素</param>
/// <param name="anchor">锚在元素中的位置。默认值(-1,-1)表示锚点位于元素中心</param>
/// <param name="iterations">应用侵蚀的次数。[默认情况下为1]</param>
/// <param name="borderType">边缘像素的外推类型</param>
/// <param name="borderValue">在边缘为常量的情况下的边缘值</param>
/// <returns></returns>
public static Mat Erode(Mat mat, InputArray? element, Point? anchor = null, int iterations = 1,
    BorderTypes borderType = BorderTypes.Constant, Scalar? borderValue = null)
{
    Mat dstMet = new Mat();

    // var element = Cv2.GetStructuringElement(MorphShapes.Rect, new OpenCvSharp.Size(1, 1));
    // 腐蚀Cv2.Erode
    Cv2.Erode(mat, dstMet, element, anchor, iterations, borderType, borderValue);
    return dstMet;
}

3、形态学运算

  • 开运算:先腐蚀后膨胀,可清除小白点;图片会非常模糊;
  • 闭运算:先膨胀后腐蚀,可清除小黑点;图片会非常模糊;
  • 形态学梯度:膨胀图与腐蚀图之差,用于提取物体边缘;
  • 顶帽:原图 减 开运算,用于分离比临近点亮一些的斑块,进行背景提取;
  • 黑帽:闭运算 减 原图,用于分离比临近点暗一些的斑块;
  • 击中与击不中:用击中结构去腐蚀原始图像得到击中集合,用击不中结构去腐蚀原始图像的补集得到击不中集合,取两者的交集(与运算)作为结果集;可用于寻找模版图片在原图片中的位置;
/// <summary>
/// 形态学运算
/// 开运算:先腐蚀后膨胀,可清除小白点;图片会非常模糊;
/// 闭运算:先膨胀后腐蚀,可清除小黑点;图片会非常模糊;
/// 形态学梯度:膨胀图与腐蚀图之差,用于提取物体边缘;
/// 顶帽:原图 减 开运算,用于分离比临近点亮一些的斑块,进行背景提取;
/// 黑帽:闭运算 减 原图,用于分离比临近点暗一些的斑块;
/// 击中与击不中:用击中结构去腐蚀原始图像得到击中集合,用击不中结构去腐蚀原始图像的补集得到击不中集合,取两者的交集(与运算)作为结果集;可用于寻找模版图片在原图片中的位置;
/// </summary>
/// <param name="mat">图片</param>
/// <param name="op">形态学运算的类型;腐蚀,膨胀,开运算,闭运算,形态学梯度,顶帽,黑帽,击中与击不中</param>
/// <param name="element">用于侵蚀的结构内核;如果element=new Mat(),则使用3x3矩形结构化元素</param>
/// <param name="anchor">锚在元素中的位置。默认值(-1,-1)表示锚点位于元素中心</param>
/// <param name="iterations">应用侵蚀和膨胀的次数[默认为1]</param>
/// <param name="borderType">边缘像素的外推类型</param>
/// <param name="borderValue">在边缘为常量的情况下的边缘值</param>
/// <returns></returns>
public static Mat MorphologyEx(Mat mat, MorphTypes op, InputArray? element,
    Point? anchor = null, int iterations = 1, BorderTypes borderType = BorderTypes.Constant, Scalar? borderValue = null)
{
    Mat dstMet = new Mat();

    //var op = MorphTypes.Gradient;
    //var element = Cv2.GetStructuringElement(MorphShapes.Rect, new OpenCvSharp.Size(6, 6));
    // 进行形态学运算
    Cv2.MorphologyEx(mat, dstMet, op, element, anchor, iterations, borderType, borderValue);
    return dstMet;
}

标签:运算,dstMet,C#,element,形态学,OpenCV,腐蚀,new,Mat
From: https://www.cnblogs.com/qq2806933146xiaobai/p/18294611

相关文章

  • Echarts-x轴数据换行显示
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><metahttp-equiv="X-UA-Compatib......
  • 12bit 两通道5.2G或单通道10.4G pcie采集卡
    12bit两通道5.2G或单通道10.4Gpcie采集卡是一款同时支持交流耦合与双极性宽带信号输入的高精度高速数据采集卡,它提供12位双通道5.2GS/s或单通道10.4GS,A/D采样变换,全功率模拟带宽(-3dB)8GHz。板载FPGA具备实时信号处理能力,板载DDR4内存容量达8GB,可以进行大数据量的实时信号处理,这......
  • C#+OpenCV基础(十)_灰度变化与直方图
    1、灰度图的线性变换///<summary>///灰度图的线性变换///OpenCVHelper.GRAY_LinearTransform(srcMat,1.2,40)///</summary>///<paramname="grayMat">灰度图片</param>///<paramname="a">乘数</param>///<paramname=&q......
  • [ABC361D]Go Stone Puzzle
    题目大意给定一个字符串S,它是由B和W组成,之后在S后面添加两个空格,可以将相邻的两个字符和空格进行交换,交换的前提是只能相邻,同时两个字符必须都是B或者W,再给一个字符串T,也是由B和W组成,问最小经过几次交换,使得S变成T\(1\leq|S|\leq14\)题解:看到数据范围,一看就知道是个搜索,怎......
  • SMU Summer 2024 Contest Round 3(7.10)
    寻找素数对思路:数的范围为10000,直接筛出所有范围内的质数,n2的枚举所有质数对和的情况#include<bits/stdc++.h>usingnamespacestd;#defineintlonglong#definePIIpair<int,int>constintN=1e4+5;vector<int>pri;intidx,st[N];voidinit(){for(in......
  • 【Mathematical Model】基于Python的相关性/显著性分析&成图
        很久之前编写的代码了,当时是用来分析遥感波段组合对于某地物反演的相关性分析。今天正好整理数据时一块分享出来。原创作者:RS迷途小书童博客地址:https://blog.csdn.net/m0_56729804?type=blog1相关性的概念        “相关性”是统计学中的一个基本......
  • C#+OpenCV基础(九)_拆分合并图层
    1、图片拆分通道图层///<summary>///图片拆分通道图层///</summary>///<paramname="mat">图片</param>///<returns></returns>publicstaticMat[]SplitChannel(Matmat){//拆分通道Cv2.Split(mat,outMat[]mats);ret......
  • 你真的懂多线程吗?多线程 并行处理 CPU 操作系统
    了解多线程、并行处理首先需要了解什么CPU、CPU核数、操作系统CPU物理数即电脑拥有的物理CPU数量,普通电脑一般只有一个CPU插槽,也就是只有一个物理CPU。我们日常说的CPU,就是指封装好的一个物理CPU,作为商品进行售卖。但在编程讨论时,某些情况下,我们说的CPU含义又是指其中一个运算......
  • 【打卡】006 P6 VGG-16算法-Pytorch实现人脸识别
    >-**......
  • 推送单据信息到第三方系统(NC65)
    此处以预付款申请单推动付款结算单到NC系统为例 目录一、Action二、Service三、ServiceImpl四、 FcVoucherUtil的 settlementXML方法(json转xml的方法)五、 FcVoucherUtil的doPost方法(推送NC的方法)一、ActionpublicActionFormgetZhiwu(ActionMapping......