我试图弄清楚如何使用OpenCV函数LUT将图像的某些3通道像素映射到定义为映射函数的值。我可以使用for循环和一些切换用例来对此进行硬编码,但是我想看看如何使用OpenCV进行编码。 以下是映射标准,这意味着映射为[0,0,0]-> 0,[255,0,0]-> 1,[255,255,0]-> 2等。 我发现OpenCV文档无法非常直观地解决此问题。有人可以使用Python帮我吗?
labelmap = [0 0 0; 255 0 0; 255 255 0; 128 0 255; 255 128 0; 0 0 255; 128255255; 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