У меня есть 16-битное изображение, которое я хочу преобразовать в 8-битное изображение. Однако я хочу сделать фильтрацию до этого. Все значения ниже некоторого значения (скажем, P1) должны стать 0. И все значения выше другого значения (скажем, P2) должны стать 255. Все значения между этими значениями должны быть масштабированы в соответствии с их расстоянием до P1 и P2.
Следующий код делает это:
def transform(value):
if value < P1:
value = 0
elif value > P2:
value = 255
else:
value = (value - P1) * (255.0 / (P2 - P1))
return value
А затем используя исходное 16-битное изображение в качестве ввода:
newImage= [[transform(value) for value in row] for row in originalImage]
Однако это невероятно медленно ... Я пытался сделать то же самое, используя cv2.convertScaleAbs
, что быстро, но не совсем то, что я хочу. В частности, функция «Abs» в этой функции делает невозможным использование.
Существуют ли разные функции, которые я могу использовать, чтобы быстрее получить нужную вещь?