为了研究cv2.GaussianBlur()内部的计算逻辑
可以分为两部分,第一步获取高斯核, 第二步滑动窗口进行卷积操作.
ta = cv2.GaussianBlur(da, (kernel, kernel), 0)
(1)设高斯kernel=3,sigma=0, 可得高斯核为:
ka = gaussian_kernel_2d(kernel, 0)

(2)使用高斯核进行卷积, 为了方便, 这里不考虑位于矩阵边界的值, 可得高斯模糊的结果:
radium = kernel//2
rows, cols = db.shape
result2 = copy.deepcopy(db)
for i in range(radium, rows-radium, 1):
for j in range(radium, rows-radium, 1):
result2[i, j] = (db[i-radium:i+radium+1, j-radium:j+radium+1] * ka).sum()

(3)与直接使用cv2.GaussianBlur的计算结果保持一致.
另外,经计算发现,borderType=cv2.BORDER_CONSTANT时, 边界填充值为0.
参考资料:
https://blog.youkuaiyun.com/weixin_37804469/article/details/113843829?spm=1001.2101.3001.6650.8&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommen
手动实现Python OpenCV中的GaussianBlur

本文探讨了如何手动实现cv2.GaussianBlur()函数的计算逻辑,包括生成高斯核和进行卷积操作。通过设定高斯核大小和标准差,详细解释了卷积过程,并对比了手动计算结果与cv2.GaussianBlur()的输出,验证了两者的一致性。同时,提到了当使用cv2.BORDER_CONSTANT作为边界填充时,值为0。
最低0.47元/天 解锁文章

4005

被折叠的 条评论
为什么被折叠?



