如何制作圆形内核?

Dan*_*018 5 python kernel

对于下面的代码,我想知道如何制作圆形内核而不是矩形内核。我目前正在查看一些圆形的东西,我想找到它的 BGR 平均值。通过调整我的内核,我的数据将会更加准确。

for center in c_1:
    b = img2[center[0]-4: center[0]+5, center[1]-4: center[1]+5, 0]
    g = img2[center[0]-4: center[0]+5, center[1]-4: center[1]+5, 1]
    r = img2[center[0]-4: center[0]+5, center[1]-4: center[1]+5, 2]
Run Code Online (Sandbox Code Playgroud)

Koh*_*anz 8

来自:https: //docs.opencv.org/3.0-beta/doc/py_tutorials/py_imgproc/py_morphological_ops/py_morphological_ops.html

我们在前面的示例中借助 Numpy 手动创建了结构元素。它是长方形的。但在某些情况下,您可能需要椭圆形/圆形的内核。为此,OpenCV 有一个函数,cv2.getStructuringElement()。您只需传递内核的形状和大小,即可获得所需的内核。

# Elliptical Kernel
>>> cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(5,5))
array([[0, 0, 1, 0, 0],
       [1, 1, 1, 1, 1],
       [1, 1, 1, 1, 1],
       [1, 1, 1, 1, 1],
       [0, 0, 1, 0, 0]], dtype=uint8)
Run Code Online (Sandbox Code Playgroud)

  • 问题是专门要求圆形内核,而不是椭圆形。我在阅读了这些链接的文档后来到这里,因为我找不到任何关于如何制作真正的循环内核的提及。很明显,生成的 numpy 数组与 x 和 y 维度不对称,而这正是圆形内核所期望的。 (4认同)

che*_*wei 6

当给定圆心时获取圆区域,您可以尝试以下函数:

def circleAverage(center, r = 4):
    """
    """
    for i in range(center[0]-r, center[0]+r):
        for j in range(center[1]-r, center[1] + r):
            if (center[0] - i) ** 2 + (center[1] - j) ** 2 <= r**2:
                // do your computation here.
Run Code Online (Sandbox Code Playgroud)

希望这对您有帮助。