python – 计算2D数组中的面积平均值
发布时间:2020-12-20 12:10:03 所属栏目:Python 来源:网络整理
导读:简而言之:我需要一个快速(预编译)函数,如来自OpenCV的filter2d,具有双类型输出.不是整数. 详情: 我有numpy数组存储OpenCV的单色图像. 我需要为某个方形(例如)内核计算矩阵的平均值,如下所示: kernel size = (3,3) 输入数组: [[13 10 10 10] [12 10 10 8]
简而言之:我需要一个快速(预编译)函数,如来自OpenCV的filter2d,具有双类型输出.不是整数.
详情: 我需要为某个方形(例如)内核计算矩阵的平均值,如下所示: 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 但这还不够快. 请告诉我是否有更快的方法来计算它. 回答: 并且决定模糊是最强大的方法,它几乎与内核大小无关. 使用不同方法进行一次图像处理的图表.测试集是298张图片. 解决方法
如果您对OpenCV解决方案感兴趣:您需要的功能是
cv2.blur .
对于大多数情况,它必须比卷积更快,因为它对标准化内核进行了单独的优化(系数之和等于1). blurred = cv2.blur(img,(3,3)) 请参阅有关平滑here的精彩教程. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |