我正在尝试创建最简单的绿屏算法。我已经生成了形状为(1920,1080)并包含布尔值的“键”数组。仅使用foreground*key + background*inverted_key
不起作用,因为前景和背景的形状是(1920,1080,3),因此会引发Value error: operands could not be broadcast together with shapes (1920,1080,3) (1920,1080)
。那我该怎么做呢?
另外,我已经尝试过使用形状为(3,3,3)和(3,3)的数组进行此操作-而且效果很好。请解释发生了什么,我很困惑。
答案 0 :(得分:1)
Python广播规则非常简单:
因此,当您乘以(3,3,3)和(3,3)时,首先将第二个数组再扩展一个维度(1,3,3),然后按比例缩放所有1以匹配您所乘的(3,3,3)到底是(3,3,3)。 当您将(1920,1000,3)乘以(1920,1000)时,第二个数组扩展为(1,1920,1000),然后将1放大,因此最终您尝试乘以(1920,1000,3) )加上(1920,1920,1000),因此出现错误。
您可以执行以下操作:
key3dim = np.tile(key.reshape(key.shape[0], key.shape[1], 1), 3)
# or
key3dim = np.repeat(key.reshape(key.shape[0], key.shape[1], 1), 3, 2)
# or
key3dim = key.reshape(key.shape[0], key.shape[1], 1).repeat(3, 2)
foreground*key3dim + background*~key3dim