OpenCV: сохранение файлов изображений. Разница между cv.imwrite и f.write()?Python

Программы на Python
Ответить
Anonymous
 OpenCV: сохранение файлов изображений. Разница между cv.imwrite и f.write()?

Сообщение Anonymous »

Я импортирую изображения с камеры видеонаблюдения для их обработки. После импорта изображения я хочу сохранить изображение для архивирования (обработка будет происходить «на лету»).
Я вижу два доступных способа сделать это:
  • Встроенный в Python модуль записи файлов (который я буду называть «файловым методом»)
  • IMwrite в OpenCV (который я буду называть « OpenCV"), что требует от меня декодируйте изображение с помощью NumPy
Во время тестирования с использованием приведенного ниже кода я обнаружил следующие результаты:
  • Файл метода OpenCV (292 КБ) значительно больше файла метода file (153 КБ)
  • Такие значения, как dpi (96), разрядность цвета (24) и разрешение пикселей (1920x1080) идентичны между файлами.
  • Файл метода файла содержит больше метаданных, таких как время создания, представление цвета и информация о камере (см. снимок экрана), вероятно, из-за того, что NumPy/OpenCV не передается. эти данные включены.
Поэтому мой вопрос: какой метод лучше? Я хочу сохранить как можно больше информации. Почему такая разница между изображениями?
import requests
import numpy as np
import cv2 as cv

response = requests.get(cam_url, auth=login)
image = cv.imdecode(np.frombuffer(response.content, dtype=np.uint8), -1)

with open('file_method.jpg', 'wb') as f:
f.write(response.content)

cv.imwrite('opencv_method.jpg', image)

Примечание:
  • Я не могу связать сами снимки по соображениям конфиденциальности. Но поверьте мне, между ними нет заметной разницы.
  • Я знаю, что использование файлов PNG предпочтительнее JPEG, но здесь это не имеет значения).
Информация о системе:
  • Python 3.12.7
  • OpenCV 4.10 .0
  • NumPy 2.1.3
  • WSL2 (Ubuntu 22.04.5 LTS (GNU/Linux 5.15.167.4-microsoft-standard-WSL2 x86_64)
РЕДАКТИРОВАТЬ:
Заключение (сводка комментариев ниже):
  • Первый метод сохраняет необработанный файл напрямую, второй кодирует его (NumPy), а затем декодирует. (OpenCV), а затем сохраняет его.
  • Процесс кодирования/декодирования удаляет из изображения метаданные EXIF.
  • Вероятна разница в размере файла. из-за большей совместимости перекодированной версии, что в моем случае является избыточным.
  • Первый метод приводит к созданию файла меньшего размера с включенными данными EXIF, хотя и с тем ограничением, что формат выходного изображения должен быть таким же, как входной. Второй метод более «безопасен», позволяя пользователю выбирать формат вывода.
Информация EXIF ​​( из ExifTool):
Метод файла
ExifTool Version Number : 12.40
File Name : file_method.jpg
Directory : .
File Size : 153 KiB
File Modification Date/Time : 2025:01:20 11:26:40+01:00
File Access Date/Time : 2025:01:20 11:44:37+01:00
File Inode Change Date/Time : 2025:01:20 11:44:31+01:00
File Permissions : -rw-r--r--
File Type : JPEG
File Type Extension : jpg
MIME Type : image/jpeg
JFIF Version : 1.02
Resolution Unit : None
X Resolution : 1
Y Resolution : 1
Exif Byte Order : Little-endian (Intel, II)
Make : AXIS
Camera Model Name : P1455-LE
Software : 10.4.5
Modify Date : 2025:01:20 11:16:51
Exposure Time : 1/82
F Number : 429496729.5
ISO : 65535
Sensitivity Type : Unknown
Time Zone Offset : 1
Exif Version : 0231
Date/Time Original : 2025:01:20 11:16:51
Create Date : 2025:01:20 11:16:51
Sub Sec Time Original : 987
Sub Sec Time Digitized : 987
Flashpix Version : 0100
Color Space : sRGB
Exposure Mode : Auto
Serial Number : B8A44F0C0631
Comment : ..g�"�bg�"�b.
Image Width : 1920
Image Height : 1080
Encoding Process : Baseline DCT, Huffman coding
Bits Per Sample : 8
Color Components : 3
Y Cb Cr Sub Sampling : YCbCr4:2:0 (2 2)
Aperture : 429496729.5
Image Size : 1920x1080
Megapixels : 2.1
Shutter Speed : 1/82
Create Date : 2025:01:20 11:16:51.987
Date/Time Original : 2025:01:20 11:16:51.987
Light Value : 54.4

Метод OpenCV
ExifTool Version Number : 12.40
File Name : opencv_file.jpg
Directory : .
File Size : 292 KiB
File Modification Date/Time : 2025:01:20 11:13:20+01:00
File Access Date/Time : 2025:01:20 11:26:58+01:00
File Inode Change Date/Time : 2025:01:20 11:13:20+01:00
File Permissions : -rw-r--r--
File Type : JPEG
File Type Extension : jpg
MIME Type : image/jpeg
JFIF Version : 1.01
Resolution Unit : None
X Resolution : 1
Y Resolution : 1
Image Width : 1920
Image Height : 1080
Encoding Process : Baseline DCT, Huffman coding
Bits Per Sample : 8
Color Components : 3
Y Cb Cr Sub Sampling : YCbCr4:2:0 (2 2)
Image Size : 1920x1080
Megapixels : 2.1


Подробнее здесь: https://stackoverflow.com/questions/793 ... nd-f-write
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»