lmdb数据库的读取与转换(二) —— 数据集操作

lmdb数据库的读取与转换(二) —— 数据集操作数据集的lmdb将数据集转换成lmdb实际上就是一条条地将img和label的key-value形式写进lmdb中importcv2importlmdbimportnumpyasnpenv=lmdb.open(‘./data/train/CVPR2016’)txn=env.begin()forkey,valueintxn.cursor():#遍历print(key)#print(value)env.close()遍历lmdb中..

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

数据集的lmdb

将数据集转换成lmdb实际上就是一条条地将img和label的key-value形式写进lmdb中

img数据在lmdb中是以二进制形式存储的

遍历lmdb中的数据

import cv2
import lmdb
import numpy as np

env = lmdb.open('./data/train/CVPR2016')

txn = env.begin()

for key, value in txn.cursor(): #遍历 
  print(key)
  print(value)

env.close()

lmdb数据库的读取与转换(二) —— 数据集操作

lmdb数据库的读取与转换(二) —— 数据集操作

从lmdb中读取图片

import cv2
import lmdb
import numpy as np

env = lmdb.open('./data/train/CVPR2016')

with env.begin(write=False) as txn:
    # 获取图像数据
    image_bin = txn.get('image-000004358'.encode())
    label = txn.get('label-000004358'.encode()).decode()  # 解码

    # 将二进制文件转为十进制文件(一维数组)
    image_buf = np.frombuffer(image_bin, dtype=np.uint8)
    
    # 将数据转换(解码)成图像格式
    # cv2.IMREAD_GRAYSCALE为灰度图,cv2.IMREAD_COLOR为彩色图
    img = cv2.imdecode(image_buf, cv2.IMREAD_COLOR)
    cv2.imwrite('show.jpg',img)
    print(label)

lmdb数据库的读取与转换(二) —— 数据集操作

lmdb数据库的读取与转换(二) —— 数据集操作

从lmdb中读取label

虽然直接print value就能看到label值了,但它是b’Angles’ 形式的,这种形式也就是bytes 对象形式,要想转成字符串要加.decode

import cv2
import lmdb
import numpy as np
 
env = lmdb.open('./data/test/cute80_288')
txn = env.begin()
 
for key, value in txn.cursor(): #遍历 
   key = key.decode('utf-8')
   value = value.decode('utf-8')
   with open('ct80_crop/'+key+'.txt', 'w') as f:
     f.write(value)

env.close()

向lmdb中写入数据

写入图片和label

import lmdb

image_path = './4.jpg'
label = 'cat'

env = lmdb.open('lmdb_dir')
cache = {}  # 存储键值对

with open(image_path, 'rb') as f:
    # 读取图像文件的二进制格式数据
    image_bin = f.read()

# 用两个键值对表示一个数据样本
cache['image_000'] = image_bin
cache['label_000'] = label

with env.begin(write=True) as txn:
    for k, v in cache.items():
        if isinstance(v, bytes):
            # 图片类型为bytes
            txn.put(k.encode(), v)
        else:
            # 标签类型为str, 转为bytes
            txn.put(k.encode(), v.encode())  # 编码

env.close()

lmdb数据库的读取与转换(二) —— 数据集操作

      if key == b"num-samples":
        txn.put(key, b"300")
或
        txn.put(key, str(300).encode())

如果读取过程中报错

lmdb.MapFullError: mdb_put: MDB_MAP_FULL: Environment mapsize limit reached

env = lmdb.open('./data/train/CVPR2016',map_size=int(1e13))

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/189584.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • java字符串分割方法.split()的详细用法「建议收藏」

    java字符串分割方法.split()的详细用法「建议收藏」先看看它在java包中的JavaAPI是:java.lang.String方法总结 (1)按指定普通字符分割: java代码如下: Stringstring=”123@456@789″; Stringarray[]=string.split(“@”);//以@分割 for(Strings:array) System.out.println(s); 运行结果: 123 456 789 (2).

    2022年6月22日
    33
  • JAVA Exception和IOException之间的使用区别

    JAVA Exception和IOException之间的使用区别使用Exception可以保证捕获异常后能继续维持JVM的运行如果Exception换成IOException后,一旦出现IO异常,便会捕获停止运行.“IoException“(流异常,通常用在文件读取中)是”Exception”(用在所有的异常处理中)的一个分支,也就是说“Exception”的范围更大。解释:通过java中在捕获异常的时候需要先捕获“子异常”(范围小,如流异常),之……

    2022年7月16日
    14
  • 在系统设计中应用迪米特法则_软件设计原则口诀

    在系统设计中应用迪米特法则_软件设计原则口诀  迪米特原则又叫 迪米特法则/最少知道原则。现在我们给出迪米特原则的定义:一个对象应该对其他对象保持最少的了解。它的优点是降低了类之间的耦合。它强调只和朋友交流,不和陌生人说话。其中朋友是指出现在成员变量、方法的输入、输出参数中的类称为成员朋友类,而出现在方法体内部的类不属于朋友类。 下面我们通过代码,更好的解释迪米特原则。比如我是一个公司的老板,我开了一家网上课程网站,我让我的…

    2025年6月7日
    1
  • ProgressDialog总结

    ProgressDialog总结ProgressDialog的使用 ProgressDialog继承自AlertDialog,AlertDialog继承自Dialog,实现DialogInterface接口。 ProgressDialog的创建方式有两种,一种是newDialog,一种是调用Dialog的静态方法Dialog.show()。 //方式一:newDialog finalProgr…

    2022年7月14日
    19
  • Python 打开文件对话框「建议收藏」

    Python 打开文件对话框「建议收藏」以下内容来自http://interactivepython.org/runestone/static/thinkcspy/GUIandEventDrivenProgramming/02_standard_dialog_boxes.html#file-chooserimporttkinterastkfromtkinterimportfiledialogimportosa…

    2022年8月30日
    2
  • mysql全文索引实现搜索功能(关键词查询)

    mysql全文索引实现搜索功能(关键词查询)最近在做一个关键词查询功能。所以开始了解mysql的全文索引技术。接下来我将一步一步告诉大家。我是如何一步一步实现关键词检索的。1.了解到mysql全文检索是以词为基础的。MySQL默认的分词是所有非字母和数字的特殊符号都是分词符。所以我存在数据库的样子是这样的。(左边的字段用于显示,右边的字段用于全文查询)2.全文检索的sqlSELECT*FROMtbk_item_coupon…

    2022年6月21日
    50

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号