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

时间:2015-09-14 11:37:56

标签: python opencv

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

例如,openCV如何决定扩展边界内的内核元素?它会忽略它们还是使用邻居的价值?

1 个答案:

答案 0 :(得分:2)

正如morphologyEx的OpenCV文档所报告的那样:

  

C ++: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() )

     

Python:cv2.morphologyEx(src,op,kernel [,dst [,anchor [,iterations [,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(对于侵蚀)。

请注意,所有其他形态操作都是 dilate erode 的不同序列。

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

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

其中ksize是结构元素的大小。

因此,默认情况下,OpenCV会创建所需的附加边界(根据内核的正确borderLength),具有特定值。该值保证了形态学操作在边界上是一致的。