:我需要像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