Я уже задавал этот вопрос, но не получил удовлетворительных ответов, поэтому я провел больше исследований и ставлю этот вопрос лучше. Я читаю изображение методом OpenCV
imread
. И я сохранил его, используя метод imwrite
. Это увеличивает размер выходного файла более чем в два раза.
Ниже приведены сведения об изображениях, которые я получил из imagemagick ( Я не записал все детали, я прикрепляю изображения для всехнеобходимы данные ):
Входное изображение:
- Формат: JPEG (формат JFIF Объединенной группы фотографических экспертов)
- MIME-тип: image / jpeg
- Класс: DirectClass
- Геометрия: 1836x3264 + 0 + 0
- Разрешение: 72x72
- Размер отпечатка: 25,5x45.3333
- Единицы: PixelsPerInch
- Тип: TrueColor
- Endianess: Не определено
- Цветовое пространство: sRGB
- Глубина: 8-бит
- Глубина канала: красный: 8-битный зеленый: 8-битный синий: 8-бит
- Статистика канала: Пиксели: 5992704
- Сжатие: JPEG
- Качество: 75
- Размер файла: 267 КБ
- Число пикселей: 5,993 М
Выходное изображение:
- Формат: JPEG (формат JFIF Объединенной группы экспертов по фотографии)
- Тип MIME: изображение / JPEG
- Класс: DirectClass
- Геометрия: 1836x3264 + 0 + 0
- Единицы: Не определено
- Тип: TrueColor
- Порядковый номер: Не определено
- Цветовое пространство: sRGB
- Глубина: 8-битная
- Глубина канала: красный: 8-битный зеленый: 8-битный синий: 8-битный
- Статистика канала: Пиксели: 5992704
- Сжатие: JPEG
- Качество: 95
- Размер файла: 611 КБ
- Число пикселей: 5,993 М
Как видно, размер входного изображения составляет 267 КБ, но на выходеразмер изображения оказался 611КБ. Теперь я знаю, что его размер зависит от кодера, значения компрессии, скорости передачи данных и т. Д. Я хочу знать, есть ли способ сохранить изображение точно такого же размера, что и входное изображение.
Я также пытался использовать сжатие в openCV
, как это cv2.imwrite('result.jpg', image, [int(cv2.IMWRITE_JPEG_QUALITY), 45])
Здесь качество изображения будет 45, но размер изображения будет все же больше, чем входное изображение (около 300 КБ). Я не хочу идти меньше 45, потому что это повлияет на детали изображения и потерю данных.
Я попытался использовать внешние библиотеки, такие как scipy, matplotlib. Но все они независимо от размера изображения.
Любая подсказка о том, почему выходное изображение увеличивается и как мы можем это исправить, очень ценится. Благодарю.
Вот код для справки
import cv2 #opencv library for image processing implementations
def main():
im = cv2.imread('sample.jpg')
cv2.imwrite('result.jpg', im)
if(__name__=='__main__'):
main()
А вот изображение для справки.