为什么cv2.filter2D()实现模糊效果的运行结果不符合预期?
问题原因
你使用cv2.filter2D效果异常的核心原因是卷积核没有做归一化处理:
cv2.blur()做的是均值模糊,内部使用的5×5卷积核每个元素值为1/(5×5)=1/25,会把卷积区域的像素值求和后取平均,符合模糊的效果- 你当前定义的
k3是全部元素为1的5×5矩阵,卷积后每个输出像素值等于对应5×5区域内所有像素值的和,uint8类型的像素值范围为0~255,求和后的结果远大于255,会发生数值溢出截断,最终输出效果异常
修复方法
对卷积核做归一化即可,修改核的定义代码为:
k3 = np.ones((5, 5), np.float32) / 25
修改后cv2.filter2D的输出和cv2.blur的输出完全一致。
补充说明
cv2.filter2D是通用2D卷积接口,如果你需要实现其他类型的模糊(比如高斯模糊),只需要把核替换为对应权重的归一化核即可正常使用。
内容的提问来源于stack exchange,提问作者user16032218
相关产品推荐
相关产品推荐

