假设我有一个遮罩(一个空白三角形-三角形中是1/255/etc,其他地方是0),我有一个我想放在三角形内部的纹理,但是纹理是连续的,而不是格式化成图像格式。例如,如果包含三角形/遮罩的长方体是100 x 100,但三角形本身只有2500个像素,那么我只有2500个像素的信息,而不是实际的长方体。在
所以,我可以手动填充三角形,一次填充每一行或每一列,但我想知道是否有一种方法可以代替它。在
下面是我用过的代码:
def fill_mask(mask, data): #mask and data are ndarrays
mask = np.copy(mask).T
k = 0
for i in xrange(len(mask)):
for j in xrange(len(mask[i])):
if mask[i][j] == 1:
mask[i][j] = data[k]
k += 1
return mask.T
那一个水平填充(一行一行)。要垂直填充,请去掉第一行和最后一行中的.T
。它可能会被缩短,虽然我不喜欢这样,所以我就让它保持原样。对它的任何改进都是值得赞赏的。在
mask[mask==1] = data
这听起来就像你在问你是否可以使用一组值来填充/修改三角形的每个像素,而不必访问那些你不想只用图像数据填充的像素。在
如果是这样的话,那么简单的回答是否定的
当然,可以创建一些优化数组,它只引用三角形的一部分像素,但是为了创建这个数组,你必须访问每个像素,所以只有当你多次访问同一个集合时才会节省。在
PIL可能会提供一些帮助来完成可能优化的混合,这比尝试自己滚动要好。在
另一方面,如果知道遮罩中三角形的尺寸和位置,则可以计算三角形内像素的位置。为此,你需要学习三角学。在
如果你还不知道如何去做,我会说坚持访问每个像素,这将是一个很好的学习体验。如果您以后需要改进性能,了解基本概念后,路径将更加清晰。
相关问题 更多 >
编程相关推荐