opencv中的磁盘结构元素

时间:2015-04-20 05:48:24

标签: opencv

我知道可以在MATLAB中创建磁盘结构元素,如下所示:

se=strel('disk',4); 

 0     0     1     1     1     0     0
 0     1     1     1     1     1     0
 1     1     1     1     1     1     1
 1     1     1     1     1     1     1
 1     1     1     1     1     1     1
 0     1     1     1     1     1     0
 0     0     1     1     1     0     0

是否有任何函数或方法或任何其他方法在opencv中创建与上面相同的结构元素。我知道我们可以使用循环手动创建它,但我只想知道是否存在某些函数。

2 个答案:

答案 0 :(得分:5)

您在OpenCV中可以获得的最接近的(不完全相同)是致电getStructuringElement()

int sz = 4;
cv::Mat se = cv::getStructuringElement(cv::MORPH_ELLIPSE, cv::Size(2*sz-1, 2*sz-1));

,它为矩阵提供值

[0, 0, 0, 1, 0, 0, 0;
  0, 1, 1, 1, 1, 1, 0;
  1, 1, 1, 1, 1, 1, 1;
  1, 1, 1, 1, 1, 1, 1;
  1, 1, 1, 1, 1, 1, 1;
  0, 1, 1, 1, 1, 1, 0;
  0, 0, 0, 1, 0, 0, 0]

答案 1 :(得分:0)

def estructurant(radius):
    kernel = np.zeros((2*radius+1, 2*radius+1) ,np.uint8)
    y,x = np.ogrid[-radius:radius+1, -radius:radius+1]
    mask = x**2 + y**2 <= radius**2
    kernel[mask] = 1
    kernel[0,radius-1:kernel.shape[1]-radius+1] = 1
    kernel[kernel.shape[0]-1,radius-1:kernel.shape[1]-radius+1]= 1
    kernel[radius-1:kernel.shape[0]-radius+1,0] = 1
    kernel[radius-1:kernel.shape[0]-radius+1,kernel.shape[1]-1] = 1
    return kernel

试试这个