如何使用 OpenCV 直接读取 tarfile 对象
How to read a tarfile object directly with OpenCV
我有一个包含 tiff 文件的压缩包。我试图在不提取和保存它们的情况下阅读它们。这是我拥有的:
tar = tarfile.open("filename.tar", 'r|')
for tiff in tar:
if tiff.isfile():
c = tar.extractfile(tiff)
typ(c) = tarfile.ExFileObject
我想直接用OpenCV读取得到一个Mat格式。
我可以使用 PIL 或 matplotlib 读取它以获得一个 numpy 数组,它们都非常有用,但我没有找到任何最新或方便的方法将 numpy 数组转换为 Mat 格式。
再一次,我想知道是否有一种方法可以直接读取它而不用保存和读取它。
万一无法直接读取它并且我必须将一个 numpy 数组转换为 Mat,我已经尝试了所有我能找到的解决方案,所有解决方案都适用于以前的版本,但没有一个对我有用。
我找到了这些:
pyopencv:有这个:pyopencv.Mat.from_pil_image(image)
适用于 python 2 和旧版本的 opencv
我还发现:
NUMPY <=> OpenCV's cv::Mat converter
但他们都老了,没有一个适合我。
如果有人能提供帮助,我将不胜感激。
我正在使用 python 3.6
opencv 3.2.0
我认为如果你对 tar.extract file()
的结果执行 read()
,你会得到 "bytes object"。然后您可以将其转换为 Numpy ndarray
并使用 OpenCV imdecode()
将内存缓冲区中的 TIF 格式解压缩为图像。
这段代码对我有用 - 虽然我似乎在从我的 tar 文件中读取 266 字节无用文件和 TIF 图像之间交替 - 我不知道为什么会这样,但如果你不明白它们,您可以删除检查无用的 266 字节文件的 if
语句!
#!/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 文件、归档、提取、内存中、即时解码、TIF、TIFF、字节对象
我有一个包含 tiff 文件的压缩包。我试图在不提取和保存它们的情况下阅读它们。这是我拥有的:
tar = tarfile.open("filename.tar", 'r|')
for tiff in tar:
if tiff.isfile():
c = tar.extractfile(tiff)
typ(c) = tarfile.ExFileObject
我想直接用OpenCV读取得到一个Mat格式。 我可以使用 PIL 或 matplotlib 读取它以获得一个 numpy 数组,它们都非常有用,但我没有找到任何最新或方便的方法将 numpy 数组转换为 Mat 格式。 再一次,我想知道是否有一种方法可以直接读取它而不用保存和读取它。
万一无法直接读取它并且我必须将一个 numpy 数组转换为 Mat,我已经尝试了所有我能找到的解决方案,所有解决方案都适用于以前的版本,但没有一个对我有用。 我找到了这些:
pyopencv:有这个:pyopencv.Mat.from_pil_image(image)
适用于 python 2 和旧版本的 opencv
我还发现:
NUMPY <=> OpenCV's cv::Mat converter
但他们都老了,没有一个适合我。
如果有人能提供帮助,我将不胜感激。
我正在使用 python 3.6 opencv 3.2.0
我认为如果你对 tar.extract file()
的结果执行 read()
,你会得到 "bytes object"。然后您可以将其转换为 Numpy ndarray
并使用 OpenCV imdecode()
将内存缓冲区中的 TIF 格式解压缩为图像。
这段代码对我有用 - 虽然我似乎在从我的 tar 文件中读取 266 字节无用文件和 TIF 图像之间交替 - 我不知道为什么会这样,但如果你不明白它们,您可以删除检查无用的 266 字节文件的 if
语句!
#!/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 文件、归档、提取、内存中、即时解码、TIF、TIFF、字节对象