То, что вы ищете, это процентиль функция.
Вместо использования matplotlib
вы можете использовать некоторую математику для получения желаемого результата.
Нижний и верхний процентили можно найти с помощью функции percentile
и линейного растягивания диапазона пикселей между нижним и верхним процентилями.
Вот пример кода:
import cv2
import numpy as np
img = cv2.imread('chelsea.png', cv2.IMREAD_GRAYSCALE) # Read input image for testing
min_percent = 2 # Low percentile
max_percent = 98 # High percentile
lo, hi = np.percentile(img, (min_percent, max_percent))
# Apply linear "stretch" - lo goes to 0, and hi goes to 1
res_img = (img.astype(float) - lo) / (hi-lo)
#Multiply by 255, clamp range to [0, 255] and convert to uint8
res_img = np.maximum(np.minimum(res_img*255, 255), 0).astype(np.uint8)
#Display images before and after linear "stretch":
cv2.imshow('img', img)
cv2.imshow('res_img', res_img)
cv2.waitKey(0)
cv2.destroyAllWindows()
Результат:
Исходное изображение:
Выходное изображение: