Python 使用Numpy将值映射到更高维度
我正在尝试将颜色贴图应用到Numpy中的二维灰度图像(该图像由OpenCV加载/生成) 我有一个包含RGB值的256个条目的长列表,这是我的颜色映射:Python 使用Numpy将值映射到更高维度,python,opencv,numpy,Python,Opencv,Numpy,我正在尝试将颜色贴图应用到Numpy中的二维灰度图像(该图像由OpenCV加载/生成) 我有一个包含RGB值的256个条目的长列表,这是我的颜色映射: cMap = [np.array([0, 0, 0], dtype=np.uint8), np.array([0, 1, 1], dtype=np.uint8), np.array([0, 0, 4], dtype=np.uint8), np.array([0, 0, 6], dtype=np.ui
cMap = [np.array([0, 0, 0], dtype=np.uint8),
np.array([0, 1, 1], dtype=np.uint8),
np.array([0, 0, 4], dtype=np.uint8),
np.array([0, 0, 6], dtype=np.uint8),
np.array([0, 1, 9], dtype=np.uint8),
np.array([ 0, 0, 12], dtype=np.uint8),
# Many more entries here
]
当我输入灰度图像(shape(y,x,1)
)时,我想输出彩色图像(shape(y,x,3)
),其中每个输入像素的灰度值用作cMap
中的索引,以找到输出像素的适当颜色。我迄今为止的微弱尝试(灵感来自)如下:
colorImg = np.zeros(img.shape[:2] + (3,), dtype=np.uint8)
for k, v in enumerate(cMap):
colorImg[img==k] = v
这给了我一个错误ValueError:array无法广播以更正形状
。我想我已经缩小了问题的范围:我所做的切片会产生一个1D布尔数组,在img
中每个条目都有一个条目colorImg
,但其条目数是img
的三倍,因此布尔数组不够长
我试过各种各样的整形和其他滑动,但我现在被卡住了。我相信有一种优雅的方法可以解决这个问题:-)您正在寻找的函数是。唯一棘手的一点是指定
轴=0
,以便返回的图像具有正确的通道数
colorImg = np.take(np.asarray(cMap), img, axis = 0)
尝试执行
cMap=np.asarray(cMap);colorImg=cMap[img[…,0]]
漂亮,谢谢。我必须重塑结果,但除此之外,它工作得很好:colorImg=np.take(np.asarray(cMap),img,axis=0)。重塑(img.shape[:2]+(3,)