OpenCvSharp函数:Dilate膨胀、GetStructuringElement获取形态操作的结构元素、Erode腐蚀

article/2025/8/29 5:32:27

Dilate膨胀

函数说明:用特定的结构元素膨胀图像。膨胀可以看成是最大值滤波,即用最大值替换中心像素点。该函数就地模式,可以指定迭代次数,多通道图像的话,每个通道分开处理。

用3x3矩形结构元素膨胀

//函数原型
void Dilate(InputArray src,OutputArray dst,InputArray? element,Point? anchor = null,int iterations = 1,BorderTypes borderType = BorderTypes.Constant,Scalar? borderValue = null)

参数

说明

InputArray src

输入图像,通道数可以任意,类型必须为CV_8U,CV_16U, CV_16S, CV_32F或CV_64F。

OutputArray dst

输出图像,与输入图像有相同的大小、类型和通道数。(支持就地模式)

InputArray? element

用于膨胀的结构元素。为null或空Mat时,默认使用3x3矩形结构元素。可通过GetStructuringElement函数生成。

Point? anchor = null

锚点,结构元素的锚点。默认为(-1,-1),表示结构元素的中心点

int iterations = 1

膨胀的次数

BorderTypes borderType = BorderTypes.Constant

边界填充方式。不支持Wrap方式

Scalar? borderValue = null

当边界填充方式为Constant时的填充值,默认是Scalar.All(double.MaxValue)

GetStructuringElement获取形态操作的结构元素

函数说明:返回一个指定大小、形状的结构元素,用于膨胀、腐蚀或其它形态操作。

//函数原型1
Mat GetStructuringElement(MorphShapes shape,Size ksize)//函数原型2
Mat GetStructuringElement(MorphShapes shape, Size ksize, Point anchor)

参数

说明

MorphShapes shape

形态形状:Rect矩形、Cross十字、Ellipse椭圆

Size ksize

元素大小

Point anchor

元素内的锚定位置。默认值(-1,-1)表示锚点位于中心。注意,只有十字形元素的形状取决于锚点位置。在其他情况下,锚只是调节形态学操作的结果被转移了多少。

返回值Mat

结构元素矩阵

Erode腐蚀

函数说明:用特定的结构元素腐蚀图像。腐蚀可以看成是最小值滤波,即用最小值替换中心像素点。

该函数就地模式,可以指定迭代次数,多通道图像的话,每个通道分开处理。

用3x3矩形结构元素腐蚀

//函数原型
void Erode(InputArray src,OutputArray dst,InputArray? element,Point? anchor = null,int iterations = 1,BorderTypes borderType = BorderTypes.Constant,Scalar? borderValue = null)

参数

说明

InputArray src

输入图像,通道数可以任意,类型必须为CV_8U,CV_16U, CV_16S, CV_32F或CV_64F。

OutputArray dst

输出图像,与输入图像有相同的大小、类型和通道数。

(支持就地模式)

InputArray? element

用于腐蚀的结构元素。为null或空Mat时,默认使用3x3矩形结构元素。可通过GetStructuringElement函数生成。

Point? anchor = null

锚点,结构元素的锚点。

默认为(-1,-1),表示结构元素的中心点

int iterations = 1

腐蚀次数

BorderTypes borderType = BorderTypes.Constant

边界填充方式。

不支持Wrap方式

Scalar? borderValue = null

当边界填充方式为Constant时的填充值,默认是Scalar.All(double.MaxValue)

图像示例

原图

膨胀与腐蚀

定位下划线位置

源码示例

public void Run() {TestDilateAndErode();MorphologyDemo();LocateGapFilling();
}/// <summary>
/// 定位下划线
/// </summary>
/// <exception cref="Exception"></exception>
private void LocateGapFilling() {using (var src = Cv2.ImRead(ImagePath.GapFilling, ImreadModes.Grayscale)) {if (src.Empty()) throw new Exception($"图像打开有误:{ImagePath.GapFilling}");Cv2.Threshold(src, src, 0, 255, ThresholdTypes.Otsu | ThresholdTypes.BinaryInv);Cv2.ImShow("GapFilling", src);using var dst = new Mat();var element = Cv2.GetStructuringElement(MorphShapes.Rect, new Size(15, 1));//可消除部分垂直线Cv2.Erode(src, dst, element);ShowMat("Location", element, dst);Cv2.WaitKey();Cv2.DestroyAllWindows();}
}/// <summary>
/// 膨胀、腐蚀
/// </summary>
/// <exception cref="Exception"></exception>
private void MorphologyDemo() {using (var src = Cv2.ImRead(ImagePath.Morphology, ImreadModes.Grayscale)) {if (src.Empty()) throw new Exception($"图像打开有误:{ImagePath.Morphology}");Cv2.Threshold(src, src, 0, 255, ThresholdTypes.Otsu | ThresholdTypes.Binary);Cv2.ImShow("gray", src);using var dst = new Mat();var element = Cv2.GetStructuringElement(MorphShapes.Rect, new Size(15, 15));//膨胀Cv2.Dilate(src, dst, element);ShowMat("Dilate Rect", element, dst);//腐蚀Cv2.Erode(src, dst, element);ShowMat("Erode Rect", element, dst);Cv2.WaitKey();Cv2.DestroyAllWindows();}
}private void ShowMat(string winNameFix, Mat element, Mat dst) {Cv2.ImShow($"{winNameFix},{element.Size()}", dst);
}/// <summary>
/// 演示Dilate与Erode,细看其中的不同。
/// 注意:一幅图像膨胀后再腐蚀的图像,不一定与原图一样。
/// </summary>
private void TestDilateAndErode() {using (var mat = new Mat(11, 15, MatType.CV_8UC1, new byte[] { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0,0,0,1,1,1,0,0,0,0,0,1,1,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0})) {Helper.Dump(mat);var element = Cv2.GetStructuringElement(MorphShapes.Rect, new Size(3, 3));//膨胀Cv2.Dilate(mat, mat, null, iterations: 2);Console.WriteLine("Dilate X 2");Dump(mat);using var dst = new Mat();//加上空白边缘Cv2.CopyMakeBorder(mat, dst, 1, 1, 1, 1, BorderTypes.Constant, new Scalar(0, 0, 0));Cv2.Erode(mat, mat, null);Console.WriteLine("The first time of Erode");Dump(mat);Cv2.Erode(mat, mat, null);//可连接腐蚀多次//Cv2.Erode(mat,mat,null,iterations: 2);Console.WriteLine("The second time of Erode");Dump(mat);//加了空白边缘的图像Console.WriteLine("dst");Dump(dst);//对比前面的腐蚀结果//腐蚀Cv2.Erode(dst, dst, null);Console.WriteLine("ErodeX1");Dump(dst);Cv2.Erode(dst, dst, null);Console.WriteLine("ErodeX2");Dump(dst);}
}#region Dump
/// <summary>
/// 控制台显示矩阵
/// </summary>
/// <param name="mat">待显示的矩阵</param>
/// <param name="dumpChannel">要显示通道</param>
public static void Dump(Mat mat, FormatType formatType = FormatType.Default) {Dump(mat, new OpenCvSharp.Range(0, mat.Channels() - 1), formatType);
}
/// <summary>
/// 控制台显示矩阵
/// </summary>
/// <param name="mat">等显示的矩阵</param>
/// <param name="channelRange">要显示的通道范围</param>
public static void Dump(Mat mat, OpenCvSharp.Range channelRange, FormatType formatType = FormatType.Default) {var nChannels = mat.Channels();if (nChannels == 1) {Console.WriteLine(mat.Dump(formatType));return;}var splits = mat.Split();for (int c = channelRange.Start; c <= channelRange.End; c++) {if (c < nChannels) {Console.WriteLine(splits[c].Dump(formatType));}else {Console.WriteLine($"通道值{c}必须小于{nChannels}");}}
}
#endregion

OpenCvSharp函数示例(目录)

参考

https://docs.opencv.org/

https://edu.csdn.net/learn/38286/608282


http://chatgpt.dhexx.cn/article/hZUOcncV.shtml

相关文章

OpenCV学习十一:dilate、erode 膨胀及腐蚀

膨胀及腐蚀&#xff0c;函数很简单&#xff0c;就写了个Demo 定义&#xff1a; 膨胀---图像膨胀的过程类似于一个卷积的过程&#xff0c;假设有图像矩阵A以及结构元素B&#xff08;注意&#xff0c;B的形状、尺寸没有限制&#xff09;&#xff0c;B在A矩阵上依次移动&#xf…

OpenCV之图像膨胀:dilate函数(C++实现)

dilate函数是使用像素邻域内的局部极大运算符来膨胀图像。 函数原型&#xff1a; void dilate(InputArray src, OutputArray dst, InputArray kernel, Point anchorPoint(-1, -1), int iterations1, int borderTypeBORDER_CONSTANT, const Scalar& borderValuemorphology…

【Opencv--形态学操作】膨胀、腐蚀、开/闭操作:cv2.morphologyEx、cv2.erode、cv2.dilate

【Opencv–形态学操作】膨胀、腐蚀、开/闭操作 文章目录 【Opencv--形态学操作】膨胀、腐蚀、开/闭操作1. 介绍2. 形态学操作2.1 腐蚀和膨胀2.1.1 腐蚀2.1.2 膨胀2.1.3 代码示例 2.2 开/闭操作2.2.1 开操作2.2.2 闭操作2.2.3 代码示例 2.3 礼帽和黑帽2.3.1 礼帽运算2.3.2 黑帽运…

opencv 图像腐蚀膨胀 erode dilate

#include "iostream" #include "opencv2/opencv.hpp" using namespace std; using namespace cv;int main() {Mat img, dst, dstbin, distancetransform,rel, rel2;img imread("m3.jpg");//转为灰度图cvtColor(img, dst, COLOR_BGR2GRAY);//二…

dilate函数

dilate函数 函数的调用形式&#xff1a; void dilate ( InputArray src , OutputArray dst , InputArray kernel , Point anchor Point(-1,-1), int iterations 1, int borderType BORDER_CONSTANT, const Scalar& borderValue morphologyDefaultBorderValue() ) 函…

opencv形态学运算:腐蚀(erode)和膨胀(dilate)

形态学操作就是基于形状的一系列图像处理操作。OpenCV为进行图像的形态学变换提供了快捷、方便的函数。最基本的形态学操作有二种&#xff0c;他们是&#xff1a;膨胀与腐蚀(Dilation与Erosion)。 膨胀与腐蚀能实现多种多样的功能&#xff0c;主要如下&#xff1a; 消除噪声分…

C++ 膨胀与腐蚀(dilate、erode)

参考&#xff1a;https://blog.csdn.net/poem_qianmo/article/details/23710721 膨胀&#xff1a; 函数&#xff1a;一般只需输前三个参数&#xff1a;输入图像、输出图像、卷积内核 void dilate( InputArray src, OutputArray dst, InputArray kernel, Po…

PYTORCH 笔记 DILATE 代码解读

dilate 完整代码路径&#xff1a;vincent-leguen/DILATE: Code for our NeurIPS 2019 paper "Shape and Time Distortion Loss for Training Deep Time Series Forecasting Models" (github.com) 1 main 函数 1.1 导入库 import numpy as np import torch from da…

Opencv中的erode和dilate(腐蚀和膨胀-python实现)

文章目录 1.腐蚀原理&#xff08;1&#xff09;具体实现过程&#xff08;2&#xff09;.函数讲解 &#xff08;3&#xff09;.代码实战2.膨胀原理&#xff08;1&#xff09;具体实现过程&#xff08;2&#xff09;函数讲解&#xff08;3&#xff09;代码实现 1.腐蚀原理 &…

OpenCV-Python腐蚀膨胀函数erode、dilate使用详解

☞ ░ 前往老猿Python博客 https://blog.csdn.net/LaoYuanPython ░ 一、引言 在《OpenCV-Python图像处理&#xff1a;腐蚀和膨胀原理及erode、dilate函数介绍&#xff1a;https://blog.csdn.net/LaoYuanPython/article/details/109441709》介绍了图像腐蚀和膨胀的基本原理&a…

OpenCV-Python图像处理:腐蚀和膨胀原理及erode、dilate函数介绍

☞ ░ 前往老猿Python博客 https://blog.csdn.net/LaoYuanPython ░ 一、引言 关于图像的腐蚀和膨胀&#xff0c;网上介绍的资料非常多&#xff0c;老猿也看了很多&#xff0c;总体来说主要偏向于就使用OpenCV腐蚀和膨胀函数的应用&#xff0c;另外原理介绍的有一小部分&#…

opencv之dilate()函数

概述 dilate()函数可以对输入图像用特定结构元素进行膨胀操作,该结构元素确定膨胀操作过程中的邻域的形状,各点像素值将被替换为对应邻域上的最大值: API说明 C++ API: void cv::dilate(InputArraysrc,(原始图像:通道数不限,depth必须是CV_8U,CV_16U,CV_16S,CV_…

OpenCV-膨胀cv::dilate

作者&#xff1a;翟天保Steven 版权声明&#xff1a;著作权归作者所有&#xff0c;商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处 原理 形态学是图像处理中常见的名词&#xff0c;图像处理的形态学基本属于数学形态学的范畴&#xff0c;是一门建立在格论和拓扑…

【图像处理】腐蚀(erode)和膨胀(dilate)

【图像处理】腐蚀&#xff08;erode&#xff09;和膨胀&#xff08;dilate&#xff09; 原理腐蚀&#xff08;erode&#xff09;膨胀&#xff08;dilate&#xff09; OpenCV实现C实现python实现 开运算&#xff08;Opening Operation&#xff09;闭运算&#xff08;Closing Ope…

chatgpt赋能Python-python_dilate

Python中的dilate操作&#xff1a;了解该操作及其应用 在计算机视觉领域&#xff0c;dilate操作是一种常用的图像处理技术。在Python中&#xff0c;我们可以使用OpenCV库来实现dilate操作。本文将介绍dilate操作的基本概念&#xff0c;讨论其应用及如何使用Python进行实现。 …

OPenCV膨胀函数dilate()的使用

OPenCV版本&#xff1a;4.4 IDE&#xff1a;VS2017 功能描述 简述&#xff1a;使用一个指定的核元素去膨胀一个图像&#xff0c;图像膨胀的过程类似于一个卷积的过程&#xff0c;源图像矩阵A以及结构元素B&#xff0c;B在A矩阵上依次移动&#xff0c;每个位置上B所覆盖元素的最…

OpenCV每日函数 图像过滤模块 (5) dilate膨胀函数

一、概述 通过使用特定的结构元素来扩大图像。该函数使用指定的结构元素扩展源图像,该结构元素确定取最大值的像素邻域的形状: 膨胀可以应用数次(迭代)。 在多通道图像的情况下,每个通道都是独立处理的。 膨胀: 腐蚀: 二、dilate函数 1、函数原型 cv::dilate…

生产环境屏蔽swagger

只需要在swagger的配置类上增加Profile( )注解&#xff0c;指定环境变量&#xff0c;即可屏蔽生产环境上的swagger&#xff0c;如下&#xff1a; 先使用dev环境&#xff0c;访问swagger&#xff0c;结果如下&#xff1a; 再使用test环境&#xff0c;访问swagger&#xff0c;结果…

生产环境解决跨域

1.先决条件是在开发环境中使用的是代理。 2然后在生产环境当中&#xff0c;增加一个proxy代理&#xff1b; &#xff08;1&#xff09;先下载&#xff1a;cnpm install http-proxy-middleware -D &#xff08;2&#xff09;引入&#xff1a; &#xff08;3&#xff09;使用&am…

linux环境下编译部署php生产环境

linux环境下编译部署php生产环境 版本控制 php&#xff1a;7.2.4 nginx&#xff1a;1.9.9 部分插件版本 xlswriter&#xff1a;1.3.3.2 redis:3.1.3 一、安装php 1.安装依赖(之后安装缺少的依赖都可以用yum安装) yum install -y gcc gcc-c make zlib zlib-devel pcre pcre…