:我需要像filter2d从OpenCV的快速(预编译)函数双型输出。不是整数。计算跨越区域意味着在简而言之2D阵列
细节: 我有numpy数组,它存储来自OpenCV的单色图像。
我需要计算矩阵的平均值为一些方(例如)内核这样的:
kernel size = (3,3)
输入数组:
[[13 10 10 10]
[12 10 10 8]
[ 9 9 9 9]
[ 9 10 10 9]]
输出数组:
[[ 10.22222222 9.44444444]
[ 9.77777778 9.33333333]]
例如:10.22222 =(13 + 10 + 10 + 12 + 10 + 10 + 9 + 9 + 9)/ 9
我写这个函数:
def smooth_filt(src,area_x,area_y):
y,x = src.shape
x_lim = int(area_x/2)
y_lim = int(area_y/2)
result = np.zeros((y-2*y_lim,x-2*x_lim), dtype=np.float64)
for x_i in range(x_lim,x-x_lim):
for y_i in range(y_lim,y-y_lim):
result[y_i-y_lim, x_i-x_lim] = np.mean(src[y_i-y_lim:y_i+area_y-y_lim,x_i-x_lim:x_i+area_x-x_lim])
return result
但这还不够快。
请告诉我,如果有更快的方法来计算这个。
答案: 我检查所有的方法。你可以看到代码:http://pastebin.com/y5dEVbzX
并决定模糊是最强大的方法它几乎独立于内核大小。
您可以使用卷积矩阵等于只系数1/9然后求和结果得到平均值 – Pierre