OpenCV Erode和Dilate切换

时间:2014-08-06 06:49:36

标签: opencv

我很好奇为什么当我尝试扩张图片时,背景会扩大,而前景中的物体会缩小。当我试图侵蚀图片时,背景会缩小,并且物体会膨胀。应该是相反的吗?

 int type = 2;
    int size = 5;
    Mat element = getStructuringElement( type, Size( 2*size + 1, 2*size + 1), Point( size, size ));
    switch( filterEnhan )
    {
        case 0: out=img.clone();
            break;
        case 1: morphologyEx(img, out, MORPH_DILATE, element);
            break;
        case 2: morphologyEx(img, out, MORPH_ERODE, element);
            break;
        case 3:morphologyEx(img, out, MORPH_OPEN, element);
            break;
    }

原始图片: Original Image

扩张后: After dilatation:

侵蚀后: After Erosion:

1 个答案:

答案 0 :(得分:0)

您使用的是错误的操作。在文档中,您可以找到对于函数morphologyEx(),允许的值为:

  • MORPH_OPEN - 开场操作
  • MORPH_CLOSE - 关闭操作
  • MORPH_GRADIENT - 形态渐变
  • MORPH_TOPHAT - “大礼帽”
  • MORPH_BLACKHAT - “黑帽子”

您使用MORPH_DILATEMORPH_ERODE进行调用,此处不允许这样做。这两个常量旨在用于函数createMorphologyFilter。它没有崩溃的原因是,那些命名的常量实际上是数字 - 1,2,3等。

所以你在范围内因此没有崩溃,但实际上你正在做其他的操作。

对于侵蚀和扩张使用功能:erode()dilate()