如何将Numpy数组中的Lab元素相乘?

时间:2019-03-01 03:34:45

标签: python numpy

我想将Numply数组中的Lab(color)元素相乘,但是得到的结果与预期不同。

img=cv2.imread('image.bmp', 1)
lab_img=cv2.cvtColor(img, cv2.COLOR_BGR2LAB)
L, a,b=lab_img.T
L_value=L*2

使用此代码,我希望L中的每个元素都将增加一倍,如下所示。


L=array([[170, 168, 168, ...,   9,   9,   9],
         [171, 169, 169, ...,   9,   9,   9],
         [173, 172, 172, ...,  10,   9,  10],
         ...,
         [  9,   9,   9, ...,   9,   9,   9],
         [  9,   9,   9, ...,   9,   9,   9],
         [  9,   9,   9, ...,   9,   9,   1]], dtype=uint8)

L_value=array([[340, 336, 336,..., 18, 18, 18],
               [342, 338, 338,..., 18, 18, 18],
               [346, 344, 344,..., 20, 18, 20],
                ...,
               [18, 18, 18,..., 18, 18, 18],
               [18, 18, 18,..., 18, 18, 18],
               [18, 18, 18,..., 18, 18, 2]], dtype=unit8)

但是我收到


L_value=array([[84, 80, 80, ..., 18, 18, 18],
               [86, 82, 82, ..., 18, 18, 18],
               [90, 88, 88, ..., 20, 18, 20],
                ...,
               [18, 18, 18, ..., 18, 18, 18],
               [18, 18, 18, ..., 18, 18, 18],
               [18, 18, 18, ..., 18, 18,  2]], dtype=uint8)

正在发生什么以及如何获得想要的结果?

1 个答案:

答案 0 :(得分:2)

无符号的8位数据类型dtype=uint8将您的数字限制在[0:255]范围内。当您将170乘以2时,您得到340,但是它被截断为84(340 = 256 + 84)。

可能的解决方案:使用uint16将图像的数据类型更改为L=L.astype(uint16)