使灰度数组中的非零元素等于 Python 中 RGB 数组中 'G' 列中的 1
Making nonzero elements in grayscale array equal to 1 in 'G' column in an RGB array in Python
所以这是一个困扰我一段时间的问题。它可能比我想象的更简单,但可以说我有一个包含灰度值的二维数组,我正在转换为 RGB:
import numpy as np
import matplotlib.pyplot as plt
grayscale = [[0, 0, 146, 150], [162, 0, 0, 60]]
gray = np.array(grayscale)
def to_rgb1(gray):
gray.resize((gray.shape[0], gray.shape[1], 1))
return np.repeat(gray.astype(np.uint8), 3, 2)
cmap = plt.get_cmap('jet')
rgba_img = cmap(gray)
rgb_img = np.delete(rgba_img, 3, 2)
print rgb_img
这段代码的输出是:
[[[ 0. 0. 0.5 ]
[ 0. 0. 0.5 ]
[ 0.71790006 1. 0.24984187]
[ 0.76850095 1. 0.19924099]]
[[ 0.92030361 1. 0.04743833]
[ 0. 0. 0.5 ]
[ 0. 0. 0.5 ]
[ 0. 0.44117647 1. ]]]
现在假设我不关心 R
和 B
列。我知道如何使这些为零,但我想做的是使灰度数组中 nonzero
的任何元素等于 G
列中的 1
因此输出 RGB
数组,因此输出如下所示:
[[[ 0. 0. 0.]
[ 0. 0. 0.]
[ 0. 1. 0.]
[ 0. 1. 0.]]
[[ 0. 1. 0.]
[ 0. 0. 0.]
[ 0. 0. 0.]
[ 0. 1. 0.]]]
最简单的方法是什么?
假设您想使灰度数组中 nonzero
的任何元素等于 G
通道中的 1
并设置 R
和 B
到 0
的通道,不管灰度中的相应值如何,一种简短的方法是 NumPy broadcasting
-
(gray != 0)[...,None]*[0.0,1,0]
样本运行-
In [18]: gray
Out[18]:
array([[ 0, 0, 146, 150],
[162, 0, 0, 60]])
In [19]: (gray != 0)[...,None]*[0.0,1,0]
Out[19]:
array([[[ 0., 0., 0.],
[ 0., 0., 0.],
[ 0., 1., 0.],
[ 0., 1., 0.]],
[[ 0., 1., 0.],
[ 0., 0., 0.],
[ 0., 0., 0.],
[ 0., 1., 0.]]])
作为另一种注重性能的方法,您可以使用 0s
进行初始化,然后设置 1s
-
out = np.zeros(gray.shape+(3,))
out[:,:,1] = gray != 0
所以这是一个困扰我一段时间的问题。它可能比我想象的更简单,但可以说我有一个包含灰度值的二维数组,我正在转换为 RGB:
import numpy as np
import matplotlib.pyplot as plt
grayscale = [[0, 0, 146, 150], [162, 0, 0, 60]]
gray = np.array(grayscale)
def to_rgb1(gray):
gray.resize((gray.shape[0], gray.shape[1], 1))
return np.repeat(gray.astype(np.uint8), 3, 2)
cmap = plt.get_cmap('jet')
rgba_img = cmap(gray)
rgb_img = np.delete(rgba_img, 3, 2)
print rgb_img
这段代码的输出是:
[[[ 0. 0. 0.5 ]
[ 0. 0. 0.5 ]
[ 0.71790006 1. 0.24984187]
[ 0.76850095 1. 0.19924099]]
[[ 0.92030361 1. 0.04743833]
[ 0. 0. 0.5 ]
[ 0. 0. 0.5 ]
[ 0. 0.44117647 1. ]]]
现在假设我不关心 R
和 B
列。我知道如何使这些为零,但我想做的是使灰度数组中 nonzero
的任何元素等于 G
列中的 1
因此输出 RGB
数组,因此输出如下所示:
[[[ 0. 0. 0.]
[ 0. 0. 0.]
[ 0. 1. 0.]
[ 0. 1. 0.]]
[[ 0. 1. 0.]
[ 0. 0. 0.]
[ 0. 0. 0.]
[ 0. 1. 0.]]]
最简单的方法是什么?
假设您想使灰度数组中 nonzero
的任何元素等于 G
通道中的 1
并设置 R
和 B
到 0
的通道,不管灰度中的相应值如何,一种简短的方法是 NumPy broadcasting
-
(gray != 0)[...,None]*[0.0,1,0]
样本运行-
In [18]: gray
Out[18]:
array([[ 0, 0, 146, 150],
[162, 0, 0, 60]])
In [19]: (gray != 0)[...,None]*[0.0,1,0]
Out[19]:
array([[[ 0., 0., 0.],
[ 0., 0., 0.],
[ 0., 1., 0.],
[ 0., 1., 0.]],
[[ 0., 1., 0.],
[ 0., 0., 0.],
[ 0., 0., 0.],
[ 0., 1., 0.]]])
作为另一种注重性能的方法,您可以使用 0s
进行初始化,然后设置 1s
-
out = np.zeros(gray.shape+(3,))
out[:,:,1] = gray != 0