基于opencv的形态学滤波

膨胀
求局部最大值操作,简单来说就是使图像变白

腐蚀
求局部最小值操作,简单来说就是使图像变黑

基于以上两种,会有开运算,闭运算,形态学梯度,顶帽,黑帽

开运算
先腐蚀再膨胀

闭运算
先膨胀再腐蚀

形态学梯度
膨胀图和腐蚀图之差

顶帽
原图-开运算

黑帽
闭运算-原图

void morphologyEx( InputArray src, OutputArray dst,
                                int op, InputArray kernel,
                                Point anchor=Point(-1,-1),          
                                int iterations=1, int  
                                borderType=BORDER_CONSTANT,
                                const Scalar&                        borderValue=morphologyDefaultBorderValue() );

op是选择变换的类型
MORPH_OPEN 开运算
MORPH_CLOSE 闭运算
MORPH_GRADIENT 形态学梯度
MORPH_TOPHAT 顶帽
MORPH_BLACKHAT 黑帽
MORPH_ERODE 腐蚀
MORPH_DELATE 膨胀

kernel内核,通过

Mat getStructuringElement(int shape, Size ksize, Point anchor=Point(-1,-1));

获得

其中shape有
MORPH_RECT 矩形
MORPH_CROSS 交叉型
MORPH_ELLIPSE 椭圆形

在C#中,使用OpenCVSharp库进行图像处理,特别是灰度形态学滤波(Grayscale Morphological Filtering)是非常常见的。形态学滤波主要用于去除噪声、连接断裂的线条或填充孔洞等,通常分为两个主要步骤:结构元素和操作。 1. **结构元素**:这是形态学操作的基础,通常是像矩形、十字或椭圆这样的简单形状,但也可以自定义。OpenCVSharp提供了一些预定义的结构元素类型,如`MorphologyExStructuringElement.ElementShape.Rect`或`MorphologyExStructuringElement.ElementShape.Ellipse`。 2. **基本操作**: - **腐蚀(Erosion)**:通过将结构元素在图像上滑动并移除每个位置与结构元素中心点相交区域的像素值,从而缩小物体边缘。 - **膨胀(Dilation)**:相反的过程,结构元素填充像素使得边缘向外扩展。 - **开运算(Opening)**:先腐蚀后膨胀,用于去除小的噪声点。 - **闭运算(Closing)**:先膨胀后腐蚀,常用于填补小的空洞。 - **顶帽(Top Hat)**:原图减去腐蚀的结果,突出高亮细节。 - **黑帽(Black Hat)**:腐蚀后的图像减去原图,突出低对比度区域。 3. **形态学链**:有时候可能需要执行一系列连续的形态学操作,比如先用开运算消除噪声,然后用闭运算恢复边缘完整性。 在实际代码中,你可以这样使用: ```csharp using Emgu.CV; using Emgu.CV.Structure; // 加载图片 Image<Gray, byte> src = new Image<Gray, byte>("path_to_your_image.jpg"); // 定义结构元素 Mat kernel = MatOfByte.Create(3, 3, (byte[,])new[,] { {0, 1, 0}, {1, 1, 1}, {0, 1, 0} }); // 矩形结构 // 应用腐蚀操作 Image<Gray, byte> erosion = src.MorphologyEx(kernel, Emgu.CV.CvEnum.MORPHOPS.CV_ERODE); // 类似地,为其他操作替换参数 var dilationKernel = ...; // 填充空洞 erosion = erosion.MorphologyEx(dilationKernel, Emgu.CV.CvEnum.MORPHOPS.CV_DILATE); ``` 如果你想要了解更多关于OpenCVSharp在C#中的应用,相关问题可以包括:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值