Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/335.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 使用自定义颜色映射将3通道图像映射到1通道_Python_Opencv - Fatal编程技术网

Python 使用自定义颜色映射将3通道图像映射到1通道

Python 使用自定义颜色映射将3通道图像映射到1通道,python,opencv,Python,Opencv,我试图弄清楚如何使用OpenCV函数LUT将图像的一些3通道像素映射到定义为映射函数的值。我可以用for循环和一些开关来硬编码,但我想看看如何用OpenCV来实现。 下面是映射准则,这意味着映射是[0,0,0]->0、[255,0,0]->1、[255255,0]->2等。 我觉得OpenCV文档并不能很直观地解决这个问题。有人能帮我用Python吗 labelmap=[0 0 0;255 0 0;255 0;128 0 255;255 128 0;0 0 255;128 255 255;0 2

我试图弄清楚如何使用OpenCV函数LUT将图像的一些3通道像素映射到定义为映射函数的值。我可以用for循环和一些开关来硬编码,但我想看看如何用OpenCV来实现。 下面是映射准则,这意味着映射是[0,0,0]->0、[255,0,0]->1、[255255,0]->2等。 我觉得OpenCV文档并不能很直观地解决这个问题。有人能帮我用Python吗

labelmap=[0 0 0;255 0 0;255 0;128 0 255;255 128 0;0 0 255;128 255 255;0 255 0]

这是我目前没有LUT的解决方案:

import numpy as np

label = np.zeros((5,5,3))
label[0,0,:] = [255,0,0]
label[1,0,:] = [255,255,0]
label[2,0,:] = [0,255,0]

print label

out_label = np.zeros((label.shape[0], label.shape[1]))
mapping = {(0,0,0): 0,
(255,0,0): 1, 
(255,255,0): 2, 
(128,0,255): 3,
(255,128,0): 4,
(0,0,255): 5,
(0,255,0): 6
}

for i in range(label.shape[0]):
    for j in range(label.shape[1]):
        out_label[i,j] = mapping[tuple(label[i,j,:])]

print out_label
在这里没有用,它将非稀疏(必须有256个条目)表独立地应用于每个通道。使用矢量化numpy函数可能会获得更好的性能。。。可能是这样的?我在这里做了类似的事情,但在这里没有用,它将一个非稀疏(必须有256个条目)表独立地应用于每个通道。使用矢量化numpy函数可能会获得更好的性能。。。也许是这样?我在这里也做过类似的事情