如何将1通道numpy矩阵转换为4通道单色图像

2024-03-29 10:55:24 发布

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

我正在与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,但是,重要的是我可以设置颜色,因为我将需要几种颜色。在


Tags: 项目方法图像numpy颜色np二进制mask
1条回答
网友
1楼 · 发布于 2024-03-29 10:55:24

是的!使用^{}来清理它并有一个one-liner,如下-

transposed = mask.T[...,None]*color

说明:

  1. {cd3>使用cd3}完成操作。在
  2. 在转置数组上使用[...,None]基本上将其所有维度推到前面,并创建一个单例dim(dim with length=1)作为最后一个轴。为了引入这个新轴,我们使用了^{}-None的别名。因此,我们将实现对转置数组沿其最后一个轴与color元素对齐的广播。在
  3. 最后,我们执行元素级乘法本身,这实际上是一个broadcasted操作。在

您可以在开始时创建新的axis部件,然后使用np.transpose或{},这样会更接近原始代码。所以,我们也可以:

^{pr2}$

而且

transposed = mask[:,:,None].swapaxes(0,1)*color

相关问题 更多 >