首页 > 解决方案 > 增加(可能)部分超出 Python 范围的 ROI 的值

问题描述

我有一个需要用另一个(较小)数组的值部分递增的数组。但是,即使较小的数组确实从较大数组的边界内开始,在某些情况下它也可能会溢出,如下所示。

在此处输入图像描述

在这种情况下,我仍然希望通过裁剪溢出索引并使用边界内剩余内容的方式来增加/修改值。

这是我目前的做法

h = big_image.shape[0]
w = big_image.shape[1]

small_image = make_small_image(c) # c is the edge length

if (x+c) > w:
   small_image = small_image[:(w - x), :]

if (y+c) > h:
   small_image = small_image[:, :(h - y)]

big_image[y:y + c, x: x + c] += small_image.T

我想知道是否有一种更简单、更快捷的方法(API 或更好的技术等)

标签: pythonnumpy

解决方案


现在您正在修改数组small_image,从而在 if 条件为 时创建数据的新副本True。相反,您可以为裁剪的小图像创建一个内存视图:

small_img_memview = small_image[:(w - x), :(h - y)]

这应该始终是正确的,即使在 if 条件是False并且应该比复制更快的情况下也是如此。

当然,您也可以将所有代码写在一行中:

big_image[y:y + c, x: x + c] += small_image[:(w - x), :(h - y)].T

推荐阅读