sys.getsizeof()
никоим образом не является надежным способом получения общего размера объекта.В то время как изображения - или другие объекты - хранящиеся в виде единого массива (с использованием numpy или нет), общий объем памяти будет сообщаться более или менее точно, если объект находится на более высоком уровне, оборачиваясь вокруг фактических данных, как в случае изображений Pillowили словарь, содержащий другие словари и списки, он потерпит неудачу.
В Интернете существуют рецепты для рекурсивного запуска getize всех связанных объектов для родительского объекта, но это также ненадежно.В общем, Python - это слишком высокий уровень, чтобы вы беспокоились о размерах побайтных объектов.Что касается общей идеи (в 10 раз), то, как правило, можно сказать, основываясь на опыте.Для изображения это будет примерно ширина х высота х 4 байта.
Вы можете использовать методы .tobytes
и аналогичные, чтобы получить действительные байты изображения, и подумать о 500 байтах или около того служебных данных для метаданных.
Что касается самих данных изображения, текущая версия PIL хранит их в ключе "data"
атрибута __array_interface__
объекта Image (т.е. img.__array_interface__["data"]
).Это, к сожалению, внутренняя деталь реализации, и для доступа к фактическим данным о пикселях должен использоваться открытый метод .tobytes
.