我是python的新手,仍在努力寻找解决此问题的好方法:
我有一个2D数组label
存储图像的标签(从0到10; 0是背景,1是树的等等)。从这个数组中,我想创建一个RGB图像rgb = np.zeros((height, width , 3), np.uint8)
,rgb
中的每个像素的颜色取决于label
的值。例如,rgb[4, 8] = green_color
if label[4, 8] = 1
。最有效的方法是什么?
答案 0 :(得分:2)
假设您有一个名为colors
的数组11 x 3
的数组,其中包含11
标签的所有可能颜色(标签范围从0
到10
) ,这是使用integer indexing
-
img = colors[label.ravel()].reshape(label.shape+(3,)).astype('uint8')
运行示例以验证输出 -
In [58]: label
Out[58]:
array([[ 2, 4, 0],
[ 2, 9, 10],
[ 6, 10, 10],
[ 4, 0, 4],
[ 1, 4, 10],
[ 8, 1, 7],
[ 9, 8, 0]])
In [59]: colors
Out[59]:
array([[ 28, 175, 15],
[ 0, 255, 0], # Green color at label = 1
[228, 12, 104],
[198, 135, 99],
[126, 124, 222],
[ 35, 78, 14],
[ 64, 61, 0],
[ 34, 49, 147],
[240, 1, 174],
[252, 1, 181],
[171, 114, 191]])
In [60]: img = colors[label.ravel()].reshape(label.shape+(3,))
In [61]: label[4,0]
Out[61]: 1
In [62]: img[4,0]
Out[62]: array([ 0, 255, 0])
In [63]: label[5,1]
Out[63]: 1
In [64]: img[5,1]
Out[64]: array([ 0, 255, 0])
答案 1 :(得分:1)
以下作品,感谢boolean indexing:
label = np.asarray(( (0,1,1,1), (2,2,0,1) ))
# label will be:
# array([[0, 1, 1, 1],
# [2, 2, 0, 1]])
# or (0, 255, 0) or so
green_color = np.asarray((0,1,0))
# initialize empty image
img = np.zeros((2,4,3))
# set pixels where label==1 to green
img[label == 1] = green_color
答案 2 :(得分:1)
您也可以使用np.choose
:
$.ajax({
type: "POST",
url: url,
data: blahblahblah,
success: function(data) {
var printWindow = window.open( "data:application/pdf;base64, " + data );
printWindow.print();
}
});
另一个(更快!)选项是np.take
,例如:
gen = np.random.RandomState(0)
labels = gen.randint(3, size=(5, 6)) # random labels between 0 and 2
print(repr(labels))
# array([[0, 1, 0, 1, 1, 2],
# [0, 2, 0, 0, 0, 2],
# [1, 2, 2, 0, 1, 1],
# [1, 1, 0, 1, 0, 0],
# [1, 2, 0, 2, 0, 1]])
colors = np.array([[255, 0, 0], # red
[0, 255, 0], # green
[0, 0, 255]]) # blue
rgb = labels[..., None].choose(colors)
# labels[0, 1] == 1, so rgb[0, 1] should be [0, 255, 0] (i.e. green)
print(repr(rgb[0, 1]))
# array([ 0, 255, 0])
使用rgb = colors.take(labels, axis=0)
作为index array,可以更简洁地完成(但不会那么快):
labels
一些基准测试:
rgb = colors[labels]