У меня есть изображение F
размера 1044 * 1408, он имеет только 3 целочисленные значения 0, 2, и 3.термоусадочных/изменить размер изображения без интерполяции
Я хочу, чтобы уменьшить его до 360 * 480. Теперь я использую Z= cv2.resize(F,(480,380))
. Но Z
интерполирован, он имеет много уникальных значений, больше, чем просто 0, 2 и 3. Я не могу просто округлить интерполированные значения до ближайшего целого числа, потому что я получу несколько единиц.
F
считывается из файла tif и обрабатывается, теперь это ndarray. Поэтому я не могу использовать PIL: F = F.resize((new_width, new_height))
как F
не от F = Image.open(*)
.
То, что вы хотите, вероятно, передискретизацию изображения вместо изменения размера. Поскольку вы упоминаете 'ndarray', я предполагаю, что вы используете' numpy'. Посмотрите на решение («numpy slicing») в http://stackoverflow.com/questions/25876640/subsampling-every-nth-entry-in-a-numpy-array. Это позволит выполнять повторную выборку (подвыборку) без интерполяции. –
не должен CV_INTER_NN метод «интерполяции» выбирает одно из значений исходного пикселя (тот, который имеет наименьшее расстояние до положения пикселя с измененным размером)? – Micka
Да, установка 'interpolation = cv2.INTER_NEAREST' позволит вам использовать ближайшее значение пикселя. Я могу использовать 'Z = cv2.resize (F, (480,380), интерполяция = cv2.INTER_NEAREST)', чтобы получить только 0,2 и 3. Мне интересно, есть ли какой-либо метод, который вообще не делает интерполяции – Echo