Как умножить элементы Lab в массиве Numpy? - PullRequest
0 голосов
/ 01 марта 2019

Я хочу умножить элемент Lab (цвет) в массивах Numply, но я получил другой результат от ожидаемого.

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 голосов
/ 01 марта 2019

8-битный тип данных без знака dtype=uint8 ограничивает ваши числа диапазоном [0:255].Когда вы умножаете, скажем, 170 на 2, вы получаете 340, но оно усекается до 84 (340 = 256 + 84).

Возможное решение: измените тип данных вашего изображения на uint16 с помощью L=L.astype(uint16).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...