openCV和python:边界外的形态转换

发布于 2021-01-29 15:01:11

我正在使用python和OpenCV。我有一个(矩形或其他任何东西)内核,并尝试执行一些形态转换。我的问题是图像边界如何?

例如,openCV如何确定边界外的内核元素以进行扩展?它会忽略它们还是使用其邻居的值?

关注者
0
被浏览
67
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    如OpenCV文档所报告的morphologyEx

    C ++:void morphologyEx(InputArray src,OutputArray dst,int
    op,InputArray内核,点锚点= Point(-1,-1),int迭代次数= 1,int borderType =
    BORDER_CONSTANT,const Scalar&borderValue = morphologyDefaultBorderValue())

    Python:cv2.morphologyEx(src,op,kernel [,dst [,anchor [,迭代[,borderType
    [,borderValue]]]]]))→dst

    您会看到该函数默认情况下会创建一个具有恒定值的边框。该值取决于形态操作的类型,并由morphologyDefaultBorderValue()以下方式定义:

    //! returns "magic" border value for erosion and dilation. 
    //! It is automatically transformed to Scalar::all(-DBL_MAX) for dilation.
    static inline Scalar morphologyDefaultBorderValue() { return Scalar::all(DBL_MAX); }
    

    然后将针对实际矩阵类型对其进行校正。因此,对于CV_8U矩阵,边界值为0(对于 dilate )或255(对于 糜烂 )。

    请注意,所有其他形态操作是 扩张腐蚀的 不同序列。

    在中FilterEngine,实际上执行形态操作的边界长度定义为:

     int borderLength = std::max(ksize.width - 1, 1);
    

    ksize结构元素的大小在哪里。

    因此,默认情况下,OpenCVborderLength使用特定的值创建所需的附加边界(根据内核是正确的)。该值保证了跨边界的形态操作是一致的。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看