Python解析LMDB格式图像数据并保存为图片

木白
木白
发布时间:2026-10-11 | 4人浏览过
原创

本文介绍如何使用Python读取LMDB数据库中的图像数据。通过Caffe的Datum对象解析二进制流,提取通道信息,并利用PIL库将单通道数据合并为RGB图像保存。适用于验证LMDB写入结果或进行数据逆向分析的场景。

LMDB图像数据读取原理

LMDB(Lightning Memory-Mapped Database)常用于存储大规模图像数据,特别是在深度学习框架如Caffe中。当需要将LMDB中的二进制数据还原为可视图像时,关键在于理解其内部存储结构。通常,图像数据被序列化在 Datum 对象中,包含通道数、宽高及像素数据。读取过程需打开环境、创建事务与游标,并逐条解析二进制流。

代码实现步骤

以下是完整的Python实现代码,依赖 lmdb、caffe 和 PIL 库。代码通过遍历游标获取每个键值对,解析 Datum 后按通道拆分像素数据,最终合并为RGB图像并保存。

from PIL import Image

def read_from_lmdb(lmdb_path,img_save_to):
 try:
  lmdb_env=lmdb.open(lmdb_path, map_size=3221225472)
  lmdb_txn=lmdb_env.begin()
  lmdb_cursor=lmdb_txn.cursor()
  datum=caffe.Datum()

  datum_index=0
  for key,value in lmdb_cursor:
    datum.ParseFromString(value)
    label=datum.label
    data=datum.data
    channel=datum.channels
    print ('Datum channels: %d' % datum.channels)
    print ('Datum width: %d' % datum.width)
    print ('Datum height: %d' % datum.height)
    print ('Datum data length: %d' % len(datum.data))
    print ('Datum label: %d' % datum.label)

    size=datum.width*datum.height
    pixles1=datum.data[0:size]
    pixles2=datum.data[size:2*size]
    pixles3=datum.data[2*size:3*size]
    #Extract images of different channel
    image1=Image.frombytes('L', (datum.width, datum.height), pixles1)
    image2=Image.frombytes('L', (datum.width, datum.height), pixles2)
    image3=Image.frombytes('L', (datum.width, datum.height), pixles3)
    #注意三通道的顺序,如果LMDB中图像是按照BGR存储的则需要按照:image3,image2,image1的顺序合并为RGB图像。PIL中图像是按照RGB的顺序存储的
    image4=Image.merge("RGB",(image3,image2,image1))
    image4.save(img_save_to+str(key)+".jpg")
    datum_index+=1
    print "extracted"

 finally:
   lmdb_env.close()

关键注意事项

  • 通道顺序:LMDB中图像可能按BGR顺序存储(常见于Caffe),而PIL默认按RGB处理。代码中通过 Image.merge("RGB",(image3,image2,image1)) 将第三个通道作为R,第一个通道作为B,以正确还原颜色。
  • 内存映射大小: map_size=3221225472 设置了3GB的映射空间,若LMDB文件较大,需根据实际数据量调整此参数,避免 lmdb.MapFullError。
  • 异常处理:使用 try...finally 确保即使解析出错,数据库环境也能正确关闭,防止资源泄漏。

以上就是Python读取LMDB中图像方法的详细内容,更多关于Python图像处理或LMDB数据解析的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表