在Emgu中使用Erode和Dilate(OpenCV for C#)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Emgu中使用Erode和Dilate(OpenCV for C#)相关的知识,希望对你有一定的参考价值。

与OpenCv Dilate函数的python绑定不同,C#版本有更多的参数都是必需的,我不知道如何使用元素参数的元素。我尝试了以下,输出看起来与inpur相同:

public static void Dilate(
    IInputArray src,
    IOutputArray dst,
    IInputArray element,
    Point anchor,
    int iterations,
    BorderType borderType,
    MCvScalar borderValue
)

在Python中我会做类似的事情:

kernel = np.ones((5,5),np.uint8)

dilation = cv2.dilate(src, kernel,iterations=3)

在C#中,我尝试使用Default values.,但输出看起来与输入没有任何不同。

    ScalarArray elem = new ScalarArray(0);

    CvInvoke.Dilate(_cannyFrame
             , _dilatedCanny
             , elem
             , new Point(-1,- 1)
             , 6
             , BorderType.Constant 
             , new MCvScalar(255, 255, 255) );    
答案

错误似乎在结构元素中。您正在使用等于零的elem,这对目标图像_dilatedCanny没有影响。在python中,你使用的是带有一个元素的内核......

另一答案

试试这个

Mat element = CvInvoke.GetStructuringElement(Emgu.CV.CvEnum.ElementShape.Rectangle, new Size(3, 3), new Point(-1, -1));

CvInvoke.Dilate(_cannyFrame
         , _dilatedCanny
         , element 
         , new Point(-1,- 1)
         , 6
         , BorderType.Constant 
         , new MCvScalar(255, 255, 255) );   

以上是关于在Emgu中使用Erode和Dilate(OpenCV for C#)的主要内容,如果未能解决你的问题,请参考以下文章

详解图像形态学操作之图形的腐蚀和膨胀的概念和运算过程,并利用OpenCV的函数erode()和函数dilate()对图像进行腐蚀和膨胀操作

形态学滤波:开运算闭运算形态学梯度顶帽黑帽

机器学习进阶-图像形态学操作-膨胀操作 1.cv2.dilate(进行膨胀操作)

[PCL]点云渐进形态学滤波

如何使用 twain/emgu/open cv 获得良好的清晰度?

指纹图像增强