我正在使用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,但是,重要的是我可以设置颜色,因为我需要多种颜色。
答案 0 :(得分:3)
是的!使用documentation进行清理并设置transposed = mask.T[...,None]*color
,就像这样 -
mask.T
<强>解释强>
np.transpose
执行最后完成的[...,None]
操作。length=1
基本上将其所有尺寸都推到前面,并创建一个单身昏暗(dim with None
)作为最后一个轴。为了引入这个新轴,我们使用了NumPy broadcasting
- color
的别名。因此,我们将实现转置数组沿着与broadcasted
元素对齐的最后一个轴的广播。np.transpose
操作。您可以在开始时执行新轴部件的创建,然后使用np.swapaxes
或transposed = mask[:,:,None].transpose(1,0,2)*color
,这将更接近原始代码。所以,或者我们可以:
transposed = mask[:,:,None].swapaxes(0,1)*color
和,
{{1}}