我正在使用numpy和cv2进行pyqt项目。基本上,我想使用二进制numpy蒙版(1024, 1024)
创建4通道单色图像(1024, 1024, 4)
,其中蒙版中的所有1均为粉红色,而所有0均不可见。然后,我转换图像并将其显示为QScene中的叠加层,以突出显示另一幅图像中的某些像素。
我目前的方法可以完成任务,但是速度太慢,并且我可以确定numpy提供了一些更方便的方法。
color = (255, 0, 238, 100)
r = (mask * color[0]).reshape((w*h))
g = (mask * color[1]).reshape((w*h))
b = (mask * color[2]).reshape((w*h))
a = (mask * color[3]).reshape((w*h))
rgba = np.dstack((r, g, b, a)).reshape((w, h, 4))
transposed = np.transpose(rgba, axes=[1, 0, 2])
有没有更好的方法来显示蒙版覆盖?我不坚持使用numpy,但是,设置颜色非常重要,因为我将需要几种颜色。
是的!使用NumPy broadcasting
清理它,并one-liner
像这样-
transposed = mask.T[...,None]*color
解释:
mask.T
做最后的np.transpose
操作。[...,None]
在转置数组上使用,基本上将其所有尺寸推到前面,并创建一个单例调光(用调暗length=1
)作为最后一个轴。为了引入这个新轴,我们使用了np.newaxis
-的别名None
。因此,我们将沿着与元素对齐的最后一个转置数组实现广播color
。broadcasted
运算。您可以在开始时执行新轴零件的创建,然后使用np.transpose
或np.swapaxes
,这将更接近您的原始代码。因此,或者我们可以有:
transposed = mask[:,:,None].transpose(1,0,2)*color
和,
transposed = mask[:,:,None].swapaxes(0,1)*color
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句