У меня есть две матрицы opencv A и B, которые имеют значения интенсивности в диапазоне от 0 до 255. Я пытаюсь выполнить арифметические операции над такими матрицами, что C = A - B
A = cv2.imread('b.jpg',0)
B = cv2.imread('a.jpg',0)
C = np.zeros_like(A)
C = A - B
Проблема в том, что если у меня A[0,0] =88 и B[0,0] = 184, то C[0,0] = 160.
Я предполагаю, что происходит то, что он делает (88-184)% 256, но есть ли способ сделать так, чтобы он ограничивался 0 или 255?
Изменить: оказалось, я неправильно понял, как numpy работает с opencv2. Я не понимал, что массивы numpy могут менять тип, и что то, на что я смотрел, было проблемой переполнения. Я бросил свой массив в число с плавающей запятой, и это исправило мои проблемы.
88 -184 = -96
так-96 + 256 = 160
. Используйте int16, возможно. Для ограничения используйтеclip
. - person Divakar   schedule 14.11.2017