opencv 方框滤波 cv2.boxFliter

处理结果 = cv2.boxFliter(原始图像, 目标图像深度, 核大小, normalize=0)

  1. 想知道函数内部参数的目标图像深度是什么

  2. 方框滤波的内部计算过程是怎么样的,如何通过核计算(不进行归一化)

以下答案引用自GPT-3大模型,请合理使用:

例子

A:
目标图像深度:即输出的结果图像的通道数。可以是8位或者32位浮点数。

方框滤波的内部计算过程:以核大小为5x5的情况来说,首先从原始的输入图像中取出5X5的窗口,然后将这25个像素值取出来放在一个缓冲区中,这时候将这25个像素值按照其权重(一般均为1/25)累加求和,所得结果就是新窗口对应位置的结果像素值,并写入输出图像中,最后,依次移动窗口,重复上述步骤,完成滤波运算。

代码实例:
import cv2
 
# 读入图像
img = cv2.imread("a.png")
 
# 原始图像、输出图像深度为32位浮点数、滤波器核大小为5X5
filtered_img = cv2.boxFilter(img, -1, (5,5), normalize=True)
 
# 显示滤波后的图像
cv2.imshow("filtered", filtered_img)
cv2.waitKey(0)

如果我的回答解决了您的问题,请采纳我的回答

(1)depth:深度,即每一个像素的位数(bits),在opencv的Mat.depth()中得到的是一个 0 – 6 的数字,分别代表不同的位数:enum { CV_8U=0, CV_8S=1, CV_16U=2, CV_16S=3, CV_32S=4, CV_32F=5, CV_64F=6 }; 可见 0和1都代表8位, 2和3都代表16位,4和5代表32位,6代表64位;

(2)方框滤波的内部计算过程
从形式上看,Box滤波是使用 全1 核对图像进行卷积。但实际上,内部是基于积分图像计算,速度极快。