假设我有一个蒙版(一个空白的三角形 - 三角形中的1/255 /等,其他地方为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
。尽管我很糟糕,但它可能会变得更短,所以我会保持原样。对它的任何改进也是值得赞赏的。
答案 0 :(得分:2)
mask[mask==1] = data
答案 1 :(得分:0)
听起来你问是否可以使用值数组填充/修改三角形的每个像素,而不必访问仅使用图像数据不想填充的像素。
如果是这样,那么简短的回答是否定的。
当然可以创建一些仅引用那些作为三角形一部分的像素的优化数组,但是为了创建该数组,你必须访问每个像素,所以只有节省才能节省你必须多次访问同一套。
PIL可能会提供一些辅助工具来进行可能优化的混合,这比尝试自己动手更好。
另一方面,如果您知道蒙版中三角形的尺寸和位置,则可以计算三角形内像素的位置。为此,你需要研究你的三角学。
如果你不知道如何做到这一点,我会说坚持访问每个像素,这将是一个很好的学习经验。如果您以后需要提高性能,一旦理解了基本概念,路径就会更清晰。