皮尔:可以装一个面具吗?

2024-04-18 11:10:34 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有一个遮罩(一个空白三角形-三角形中是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。它可能会被缩短,虽然我不喜欢这样,所以我就让它保持原样。对它的任何改进都是值得赞赏的。在


Tags: in信息fordatalen地方图像格式etc
2条回答

mask[mask==1] = data

这听起来就像你在问你是否可以使用一组值来填充/修改三角形的每个像素,而不必访问那些你不想只用图像数据填充的像素。在

如果是这样的话,那么简单的回答是否定的

当然,可以创建一些优化数组,它只引用三角形的一部分像素,但是为了创建这个数组,你必须访问每个像素,所以只有当你多次访问同一个集合时才会节省。在

PIL可能会提供一些帮助来完成可能优化的混合,这比尝试自己滚动要好。在

另一方面,如果知道遮罩中三角形的尺寸和位置,则可以计算三角形内像素的位置。为此,你需要学习三角学。在

如果你还不知道如何去做,我会说坚持访问每个像素,这将是一个很好的学习体验。如果您以后需要改进性能,了解基本概念后,路径将更加清晰。

相关问题 更多 >