Изменение размера изображения с помощью Opencv Python и сохранение качества

Я хотел бы изменить размер изображений, используя библиотеку Python OpenCV. Работает, но качество изображения очень плохое.

Должен сказать, я хотел бы использовать эти изображения для веб-сайта для обмена фотографиями, поэтому качество является обязательным.

Вот код, который у меня есть на данный момент:

[...]

_image = image
height, width, channels = _image.shape
target_height = 1000
scale = height/target_height
_image = cv2.resize(image, (int(width/scale), int(height/scale)), interpolation = cv2.INTER_AREA)
cv2.imwrite(local_output_temp_file,image, (cv2.IMWRITE_JPEG_QUALITY, 100))
[...]

Я не знаю, есть ли другие параметры, которые можно использовать для указания качества изображения.

Спасибо.


person CC.    schedule 09.12.2019    source источник
comment
Насколько я знаю, это все, что может сделать базовый opencv. Сколько стоит оригинальный размер? Насколько вы масштабируете?   -  person Sharan    schedule 09.12.2019
comment
Вы масштабируете вверх или вниз?   -  person Piotr Rarus    schedule 09.12.2019
comment
я уменьшаю масштаб   -  person CC.    schedule 09.12.2019


Ответы (2)


Попробуйте использовать более точные методы интерполяции, такие как cv2.INTER_CUBIC или cv2.INTER_LANCZOS64. Попробуйте также переключиться на scikit-image. Документы лучше, а библиотека более функциональна. Он имеет 6 режимов интерполяции на выбор:

  • 0: ближайший сосед
  • 1: Билинейный (по умолчанию)
  • 2: биквадратный
  • 3: бикубический
  • 4: Би-четверть
  • 5: Биквинт
person Piotr Rarus    schedule 09.12.2019

Вы можете попробовать использовать imutils.resize, чтобы изменить размер изображения с сохранением соотношения сторон. Вы можете настроить на основе желаемого width или height для повышения или понижения масштаба. Также при сохранении изображения следует использовать формат изображения без потерь, например .tiff или .png. Вот краткий пример:

Введите изображение с формой 250x250

Изображение уменьшено до 100x100

введите здесь описание изображения

Изображение возвращено к 250x250

введите здесь описание изображения

import cv2
import imutils

image = cv2.imread('1.png')
resized = imutils.resize(image, width=100)
revert = imutils.resize(resized, width=250)

cv2.imwrite('resized.png', resized)
cv2.imwrite('original.png', image)
cv2.imwrite('revert.png', revert)
cv2.waitKey()
person nathancy    schedule 09.12.2019