Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在字典中存储jpg数据?_Python_Image_Data Structures - Fatal编程技术网

Python 在字典中存储jpg数据?

Python 在字典中存储jpg数据?,python,image,data-structures,Python,Image,Data Structures,我有一台每分钟拍摄两张图像的相机,每天拍摄2880张图像,每幅图像约180kb。在几个月的时间里,这会增加许多图像,这使得传输数据变得很麻烦。为了解决这个问题,我将图像放入每月的tar文件(例如201301.tar、201302.tar)。我在分析工作中使用图像,因此我确实需要访问数据,我遇到了两个问题: 要加载一个单独的jpg,我需要对这个月的图像进行去焦油处理(我希望避免去焦油处理所涉及的时间) 当我必须读取几天的数据时,读取单个jpg的速度很慢 是否有一种将图像数据存储在单个文件中的实用方

我有一台每分钟拍摄两张图像的相机,每天拍摄2880张图像,每幅图像约180kb。在几个月的时间里,这会增加许多图像,这使得传输数据变得很麻烦。为了解决这个问题,我将图像放入每月的tar文件(例如201301.tar、201302.tar)。我在分析工作中使用图像,因此我确实需要访问数据,我遇到了两个问题:

  • 要加载一个单独的jpg,我需要对这个月的图像进行去焦油处理(我希望避免去焦油处理所涉及的时间)
  • 当我必须读取几天的数据时,读取单个jpg的速度很慢
  • 是否有一种将图像数据存储在单个文件中的实用方法(我更可能会再次按月存储数据)?我认为存储为字典(key=datetime值,value=array(size=480 x 660 x 3))是有意义的,但是我在重新加载数据时遇到了问题

    # Example
    import datetime as dt
    from scipy.misc import imread as ir
    
    dts = dt.datetime.strptime
    
    image = ir('skycam-current.jpg',flatten=False)
    
    data = {}
    data[dt.datetime(2013,01,01)] = image
    np.savez('test.dic.npz',data)
    
    # Then, to re-load the data
    data = np.load('test.dic.npz')
    
    当我重新加载数据时,我会得到一本字典,有点:

    >>> type(data)
    >>> numpy.lib.npyio.NpzFile
    
    >>> data.keys()
    >>> ['arr_0']
    
    如果我试图恢复字典,我会得到一个0-d数组

    >>> a = data['arr_0']
    >>> a.shape
    >>> ()
    

    有人能推荐一种更好的方法来存储字典或存储图像数据吗?我一直在使用pandas进行分析/存储,但它似乎不是为存储阵列而构建的

    如果它已经是jpeg压缩的,那么进一步压缩它并不会带来很大的空间优势。您将这些文件放入tar归档文件是为了节省空间,还是因为目录需要人类可读?如果目录不需要是人类可读的,那么与每月存储在一个单独的文件夹中并使用sqlite数据库或文件/文件夹名称中的一些逻辑来跟踪它们相比,归档没有多大优势

    tar文件是存储不可压缩文件(如jpg)的好方法。它比使用zip要好,因为您没有解压缩开销,而且可能比使用文件系统要好,因为您生成了大量文件。将文件存储在RAM中意味着您必须拥有大量专用于任务的内存,这使得在机器之间访问和传输数据变得更加困难

    tar文件的一个大问题是,它们不像zip文件那样被索引。这意味着,要从归档文件的中间提取文件,必须读取整个归档文件,直到找到该文件为止


    为了克服这个限制,一些人构建了tar文件索引器,它将文件的偏移量存储在归档文件中,以便您可以直接读取它们。一个这样的项目是,它很方便地用python编写,因此您可以轻松地将其用作库。它只有100行长,因此也很容易理解和修改。

    您考虑过将其存储为bytestring吗?如果切换为zip格式,您至少可以提取单个文件-看看为什么不使用数据库数据库可能是一个不错的选择,但我从未使用过数据库。我试图停留在我的经验范围内。tar只是存档图像,没有压缩。我确实将图像存储在一个有序的目录中(例如/year/month/day/image.jpg)。问题是当前必须逐个文件加载图像数据,而我希望加载,例如2013年10月的所有数据,马上。那么,使用tar与仅使用目录相比,您到底想要实现什么呢?我只使用tar来减少机器之间的传输时间以及将数据推送到存档时的传输时间。在您执行这两种操作之前,只需将数据放入某个临时位置就行了吗?我不确定tar的性能,但它肯定比建立这么多不同连接来发送文件的开销要低。zip文件中的条目不必压缩。我喜欢tarindexer的想法。谢谢你的提示…我会调查的。