Я использую cv2.resize для изменения размера двухмерных изображений, заданных в трехмерном массиве типа «uint8», и я хочу использовать интерполяцию ближайшего соседа. Я заметил, что он дает (случайным образом) совершенно несовместимый результат (например, он будет выводить значения вне диапазона значений исходного массива).
Я попытался воспроизвести ошибку с помощью приведенного ниже кода (создав ряд таких примеров и проверив, есть ли противоречивые результаты), и я заметил, что в некоторых случаях у меня их много, а в других они просто все исправляет.
import numpy as np
import cv2
shape=[512,512,80,10]
nbr_iter=100
for _ in range(nbr_iter):
img=np.random.randint(0,2,shape,dtype=np.uint8)
ret=np.reshape(img,(img.shape[0],img.shape[1],-1))
ret = cv2.resize(ret, (256,256),interpolation=cv2.INTER_NEAREST)
ret=np.reshape(ret,(ret.shape[0],ret.shape[1],img.shape[2]))
if np.max(ret)>1:
print("inconsistant array (value greater than 1) with value of %s"%(np.max(ret)))
При последнем запуске код выводит:
inconsistant array (value greater than 1) with value of 130
inconsistant array (value greater than 1) with value of 130
...
для всех прогонов, хотя значения исходного массива лежат в пределах [0,1], если смотреть на значения внутри:
ret[ret>1]
[ 16 130 55 130 86 85]
Я не могу иметь никакого смысла в выводе, почему там были эти случайные числа, поэтому мне было бы интересно узнать, могут ли другие люди воспроизвести это и откуда могут возникнуть эти проблемы.