Я думаю, вы получите "объект байтов ", если вы сделаете read()
в результате tar.extract file()
.Затем вы можете преобразовать его в Numpy ndarray
и использовать OpenCV imdecode()
, чтобы распаковать формат TIF из буфера памяти в изображение.
Этот код работает для меня - хотя якажется, чередуются между чтением бесполезных 266-байтовых файлов и TIF-изображений из моего tarfile - я не знаю, почему это так, но если вы их не получите, вы можете просто удалить оператор if
, который проверяет бесполезные 266-байтовые файлы!
#!/usr/bin/env python3
import cv2
import sys
import tarfile
import numpy as np
tar = tarfile.open('images.tar','r|')
for f in tar:
# Extract an image
c = tar.extractfile(f).read()
if sys.getsizeof(c) > 266:
print(sys.getsizeof(c))
na = np.frombuffer(c, dtype=np.uint8)
im = cv2.imdecode(na, cv2.IMREAD_COLOR)
cv2.imshow('Extracted', im)
Если кто-нибудь знает, что такое бесполезная вещь 266 байт, пожалуйста, скажите мне, и мы все что-нибудь узнаем!Спасибо.
Ключевые слова : Python, OpenCV, Numpy, np.array, tar, tar-файл, архив, извлечение, оперативная память, imdecode, TIF, TIFF, объект байтов