我想将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)
正在发生什么以及如何获得想要的结果?
答案 0 :(得分:2)
无符号的8位数据类型dtype=uint8
将您的数字限制在[0:255]
范围内。当您将170乘以2时,您得到340,但是它被截断为84(340 = 256 + 84)。
可能的解决方案:使用uint16
将图像的数据类型更改为L=L.astype(uint16)
。