我有以下带有 RGB 值和相应类的图像蒙版:

背景:255 0 0 脸部:255 255 0 头发:127 0 0 眼睛:0 0:0 255 255 嘴:0 255 0

现在我想为像素级别的每个类创建一个布尔numpy数组,这样每个像素都有一个对应的类,即每个[,width]类都有一个布尔数组,每个像素是True还是False取决于它是否属于那个班。

对于 BG、嘴巴和眼睛,我可以简单地复制轴 0、1 或 2,并使用 np.bool 将其转换为 True 或 False(255 = True,0 = False)。

然而,对于其他类,我正在努力使其在不使用双 for 循环的情况下工作。 有人可以帮助我在不使用 for 循环的情况下得到我想要的东西吗?

您可以利用 numpy 广播:

一个例子:

10

11

12

13

14

15

16

17 号

18

19

20

21

22

>>> ()

{'BG': 数组([255, 0, 0]),

'眼睛': 数组([0, 0, 255]),

'脸': 数组([255, 255, 0]),

'头发': 数组([127, 0, 0]),

'嘴': array([0, 255, 0]),

'鼻子': array([ 0, 255, 255])}

>>>

数组([[[255, 0, 0],

[127, 0, 0],

[255, 0, 0],

[255, 0, 0]],

[[255, 255, 0],

[ 0, 255, 0],

[255, 0, 0],

[ 0, 255, 0]],

[[ 0, 0, 255],

[255, 255, 0],

[ 0, 0, 255],

[ 0, 0, 255]]])

使用无线电可以同时检查三个频道。 然后沿着轴 2,我们可以选择满足所有三个方程的点。

>>> mask = {k: (==v).all(2) for k, v in .items()}

就是这样。 结果:

10

11

12

13

14

15

16

17 号

18

19

>>>(面具)

{'BG':数组([[真,假,真,真],

[假,假,真,假],

[假,假,假,假]]),

'眼睛':数组([[假,假,假,假],

[假,假,假,假],

[真,假,真,真]]),

'脸':数组([[假,假,假,假],

[真,假,假,假],

[假,真,假,假]]),

'头发': array([[False, True, False, False],

[假,假,假,假],

[假,假,假,假]]),

'嘴': array([[假,假,假,假],

[假,真,假,真],

[假,假,假,假]]),

'鼻子': array([[假,假,假,假],

[假,假,假,假],

[假,假,假,假]])}

像这样的事情怎么样?

10

11

12

13

14

15

= {'bg': [255, 0, 0],

“脸”:[255, 255, 0],

'头发' : [127, 0, 0],

“眼睛”:[0,0,255],

'鼻子' : [0, 255, 255],

“嘴”:[0,255,0],

arr = np..([0,127,255], size=(3,500,500)) # 图像

对于 .keys() 中的键:

= (arr[0,…]==[键][0]) * (arr[1,…]==[键][1]) * (arr[2,…]== [关键][2])

# 做与

顺便一提:

对于 BG、嘴巴和眼睛,我可以复制轴 0、1 或 2,并使用 np.bool 将其设置为 True 或 False(255 = True,0 = False)。

会导致标签不明确。 将对鼻子进行 BG 和眼睛评分,例如

好了,今天的主题就讲到这里吧,不管如何,能帮到你我就很开心了,如果您觉得这篇文章写得不错,欢迎点赞和分享给身边的朋友。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注