opencv - 为什么 OpenCV 中的结构元素是不对称的?

标签 opencv image-processing mathematical-morphology image-morphology

为什么OpenCV中的结构元素是不对称的?

cv2.getStructuringElement(cv2.MORPH_ELLIPSE, ksize=(4,4))

返回

array([[0, 0, 1, 0],
       [1, 1, 1, 1],
       [1, 1, 1, 1],
       [1, 1, 1, 1]], dtype=uint8)

为什么不是

array([[0, 1, 1, 0],
       [1, 1, 1, 1],
       [1, 1, 1, 1],
       [0, 1, 1, 0]], dtype=uint8)

代替?

奇数结构元素在 90 度旋转方面也是不对称的:

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)

这样做的目的是什么?

最佳答案

它没有任何目的,只是它是这种形状的许多可能插值之一。在大小为 5 的椭圆的情况下,如果它是完整的,它将与 MORPH_RECT 相同,如果从侧面和顶部移除相同的两个,则它将是一个菱形。无论哪种方式,它实际实现 in the source code 的方式都是您所期望的——它通过距离函数创建一个圆,并采用近似整数来获取二进制像素。在该文件中搜索 cv::getStructuringElement,您会找到实现,它没什么特别的。

如果您认为应该对此功能进行更新,请在 GitHub 上打开一个包含已实现版本的 PR,或者先讨论一个问题。我认为在这里做出成功的贡献很容易,而且我敢打赌对称性的理由很充分。人们会期望使用椭圆核处理对称图像的结果不依赖于图像的方向。

关于opencv - 为什么 OpenCV 中的结构元素是不对称的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47635612/

相关文章:

ios - 使用OpenCV处理来自Phantom 4的实时视频

opencv - 可以删除 opencv 或 scikit 图像中的骨架小分支吗?

python - 如何对二值图像应用比例膨胀运算?

image-processing - 形态命中未命中变换

image-processing - 使用透视投影进行矩形识别的霍夫变换与轮廓检测

Python Opencv morphological closing gives src data type = 0 不支持

linux - 使用安装在远程服务器系统上的 OpenCV - ubuntu

c++ - 使用 OpenCV CascadeClassifier 的内存泄漏

Python OpenCV : Play UDP video streaming while sending keep alive messages

用于图像分割的 C++ 库