bim*_*mbi 1 python opencv signal-processing image-processing filter
对于 OpenCV 中的盒式过滤器,平滑核大小可以通过 cv2.boxFilter() 中的 ksize 参数定义。我想知道ksize实际上是X和Y正方向上的尺寸还是原点周围的尺寸?

在上图中 - ksize 应该是 (1, 1),对吗?或者应该是(0.5,1)?例如,对于两个方向的宽度均为 5,ksize 应该是 (5, 5) 还是 (10, 5)?对于上述情况,我希望 X 正向和负向的宽度均为 5,y 方向的高度均为 5。我认为 y 无论如何应该是 5,因为对于盒式滤波器来说负 y 并没有多大意义。
通过测试boxFilter的脉冲响应很容易找出答案。设x为 9x9 图像
>>> x
array([[0., 0., 0., 0., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 1., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 0., 0., 0., 0.]])
Run Code Online (Sandbox Code Playgroud)
然后使用 ksize=(5,5) 运行 boxFilter 作为cv2.boxFilter(x, 6, (5,5))结果
array([[0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ],
[0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ],
[0. , 0. , 0.04, 0.04, 0.04, 0.04, 0.04, 0. , 0. ],
[0. , 0. , 0.04, 0.04, 0.04, 0.04, 0.04, 0. , 0. ],
[0. , 0. , 0.04, 0.04, 0.04, 0.04, 0.04, 0. , 0. ],
[0. , 0. , 0.04, 0.04, 0.04, 0.04, 0.04, 0. , 0. ],
[0. , 0. , 0.04, 0.04, 0.04, 0.04, 0.04, 0. , 0. ],
[0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ],
[0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ]])
Run Code Online (Sandbox Code Playgroud)
就像Cris说的,ksize是box的全宽和高,filter居中。