加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

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,具有双类型输出.不是整数.

详情:
我有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

并且决定模糊是最强大的方法,它几乎与内核大小无关.

使用不同方法进行一次图像处理的图表.测试集是298张图片.

enter image description here

解决方法

如果您对OpenCV解决方案感兴趣:您需要的功能是 cv2.blur.
对于大多数情况,它必须比卷积更快,因为它对标准化内核进行了单独的优化(系数之和等于1).

blurred = cv2.blur(img,(3,3))

请参阅有关平滑here的精彩教程.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读