Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用Numpy将值映射到更高维度_Python_Opencv_Numpy - Fatal编程技术网

Python 使用Numpy将值映射到更高维度

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

我正在尝试将颜色贴图应用到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.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,)