所以我的问题是,我试图用典型的numpy语法将一个小图像粘贴到一个大图像中:
large_im = np.linspace(0,1,20)[:,None]*np.ones([1,20])
small_im = np.linspace(1,0,10)[None,:]*np.ones([10,1])
a0,b0 = 5,5
large_im[a0:a0+small_im.shape[0],b0:b0+small_im.shape[1]] = small_im
plt.figure()
plt.imshow(large_im)
大多数情况下这都很好,但也有一些边缘情况,即小图像的一部分挂在大图像之外,numpy不喜欢这样。
就像这样:
a0,b0 = 15,15
large_im[a0:a0+small_im.shape[0],b0:b0+small_im.shape[1]] = small_im
或者:
a0,b0 = -5,-5
large_im[a0:a0+small_im.shape[0],b0:b0+small_im.shape[1]] = small_im
这两个代码段会引发Value错误,因为numpy索引生成的目标数组与small_im大小不匹配。
现在,我不得不通过编写一堆代码来繁琐地处理所有这些边缘情况,这些代码检查源区域和目标区域的每个维度,并修剪大小,以便一切都合适。
你知道是否有一个numpy函数可以自动完成这个任务吗?
1条答案
按热度按时间iecba09b1#
这样的东西怎么样:
当
a0
或b0
为负数时,它不起作用,但您可以轻松地使用if
语句来处理这些情况: