как остановить матрицу opencv2 от применения мода к арифметическому результату

У меня есть две матрицы 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 могут менять тип, и что то, на что я смотрел, было проблемой переполнения. Я бросил свой массив в число с плавающей запятой, и это исправило мои проблемы.


person user43825    schedule 14.11.2017    source источник
comment
всегда используйте общий тег [python]. Если ваш вопрос зависит от версии, используйте тег для конкретной версии.   -  person juanpa.arrivillaga    schedule 14.11.2017
comment
Это не моддинг, это переполнение, так что зацикливание - 88 -184 = -96 так -96 + 256 = 160. Используйте int16, возможно. Для ограничения используйте clip.   -  person Divakar    schedule 14.11.2017


Ответы (1)


Используйте cv2.subtract(), который не переворачивает отрицательные целые значения.

person Colin Dickie    schedule 14.11.2017