Использование OpenCV, всякий раз, когда я сохраняю изображение (из потока камеры) как JPG на диск. Размер файла в байтах на диске отличается в зависимости от качества JPEG, как ожидалось.
Однако всякий раз, когда я читаю изображения независимо от размера файла на диске, размер памяти остается постоянным. Это нормально?
Кроме того, кажется, что существует большая разница в размере диска и памяти изображения. Я ожидал гораздо меньшего размера памяти, немного по сравнению с размером диска.
Например, для
import sys
import cv2
cv2.imwrite('temp.jpg', frame, [int(cv2.IMWRITE_JPEG_QUALITY), 10])
# disk size of temp.jpg is 24kb
image = cv2.imread('temp.jpg')
# memory size is 2.7 mb
cv2.imwrite('temp.jpg', frame, [int(cv2.IMWRITE_JPEG_QUALITY), 90])
# disk size of temp.jpg is 150kb
image = cv2.imread('temp.jpg')
# memory size is still constant at 2.7 mb
Вот как я вычисляю размер памяти:
print("Image byte size :", round(sys.getsizeof(image) / (1024 * 1024), 2), "mb")
Да, это абсолютно нормально. Все форматы изображений на самом деле являются различными способами сжатия mxn
матрицы mxn
RGB. JPG
относительно лучше PNG
с точки зрения пространства. Также обратите внимание, что это относительное поведение происходит за счет стоимости: JPG
- метод сжатия с потерями, но PNG
- метод сжатия без потерь.
Когда мы читаем изображение с JPG
или PNG
с диска, оно сначала несжатое, а затем данные матрицы заполняются. Размер памяти всегда будет: mxnx 3
байта, но размер диска будет отличаться в зависимости от используемого формата сжатия, уровня сжатия и т.д. Он также может варьироваться для разных градиентов изображений. Изображение с одним цветом займет гораздо меньше места в формате JPG
, чем изображение с большим количеством цветов (градиентные изображения). Но размер памяти обоих изображений будет таким же: mxnx 3
байта.