У меня есть массив Numpy, который я хочу изменить размер, используя OpenCv.
его значения варьируются от 0 до 255. Если я предпочитаю использовать CV2.Inter_Cubic, я могу получить значения за пределами этого диапазона. Это нежелательно, поскольку предполагается, что измененный массив все еще представляет изображение. Другой состоит в том, чтобы использовать другой метод интерполяции.
Я понимаю, что использование Inter_area действительна для опускания изображения, но работает аналогично ближайшему соседу для повышения дискретизации, делая его менее чем оптимальным для моей цели. /> Пример для значений вне диапазона с использованием inter_cubic: < /p>
a = np.array( [ 0, 10, 20, 0, 5, 2, 255, 0, 255 ] ).reshape( ( 3, 3 ) )
[[ 0 10 20]
[ 0 5 2]
[255 0 255]]
b = cv2.resize( a.astype('float'), ( 4, 4 ), interpolation = cv2.INTER_CUBIC )
[[ 0. 5.42489886 15.43670964 21.29199219]
[ -28.01513672 -2.46422291 1.62949324 -19.30908203]
[ 91.88964844 25.07939219 24.75106835 91.19140625]
[ 273.30322266 68.20603609 68.13853455 273.15966797]]
< /code>
Редактировать: Как указал Берак, преобразование типа в float (от int64) позволяет обеспечивать значения вне исходного диапазона. Функция cv2.resize () не работает с типом «Int64» по умолчанию. Однако преобразование в 'uint8' будет автоматически насыщать значения [0..255]. < /P>
Кроме того, как указано Сауллокастро, еще один связанный ответ продемонстрировал интерполяцию Scipy, и что Defualt метод является кубической взаимодействием (с насыщением).>
Подробнее здесь: https://stackoverflow.com/questions/238 ... zing-image
Какой вид интерполяции лучше всего для изменения размера изображения? ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение