我有以下带有 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 和眼睛评分,例如
好了,今天的主题就讲到这里吧,不管如何,能帮到你我就很开心了,如果您觉得这篇文章写得不错,欢迎点赞和分享给身边的朋友。