如何在字典中存储图像集,并使用python opencv检索它

如何在字典中存储图像集,并使用python opencv检索它,python,opencv,dictionary,Python,Opencv,Dictionary,我有一个字典,我把图像作为值,索引作为键,我使用zip函数存储它,当我试图检索它时,它不显示图像。我所做的是: pth = 'D:\6th sem\Major project\Code' resizedlist = dict() for infile in glob.glob(os.path.join(path,'*.jpg')): imge = cv2.imread(infile) re_img = cv2.resize(imge,(256,256)) ImEdges = cv

我有一个字典,我把图像作为值,索引作为键,我使用zip函数存储它,当我试图检索它时,它不显示图像。我所做的是:

pth = 'D:\6th sem\Major project\Code'
resizedlist = dict()

for infile in glob.glob(os.path.join(path,'*.jpg')):
  imge = cv2.imread(infile)

  re_img = cv2.resize(imge,(256,256))
  ImEdges = cv2.imwrite('{0:d}.jpg'.format(i),re_img)
  resizelist.append(imge)
  i = i + 1
  resizelist_key = OrderedDict(sorted(enumerate(resizelist),key=lambda x: x[0])).keys()

for i,infle in enumerate(glob.glob(os.path.join(pth,'*.jpg'))):
  img = cv2.imread(infle)
  my_key = str(i)               
  resizedlist[my_key] = img

# Retreival code, result_list contains euclidean distance, and resultlist_key contains numbers

res_lst_srt = {'val': result_list,'key':resultlist_key}
res_lst_srt['val'], res_lst_srt['key'] = zip(*sorted(zip(res_lst_srt['val'], res_lst_srt['key'])))
cv2.imshow('query image',imge)
for key in res_lst_srt:
   if key in resizedlist:
       cv2.imshow("Result " + str(i + 1), resizedlist[i])
cv2.waitKey(0)
cv2.destroyAllWindows()    
路径包含系统中一组图像的路径。resizedlist_键包含从零开始到n-1的数字。有没有办法根据它的键从字典中检索图像? 我一直在做这个,但仍然没有得到正确的结果,我不知道我的代码是否正确。所以我在问你的建议,我有一个49幅图像的数据集,我需要把所有图像放在一个字典里,这样我就可以使用它的键值随机检索图像


提前谢谢

我不太理解您的代码和您的答案,尤其是您代码中的
zip
部分

无论如何,我假设您需要一个数字作为键的字典,以及一个与键关联的值的图像

我认为您对python中的
dict
的工作原理有些困惑,您应该稍微研究一下。谷歌有很多关于python中dicts的不错的教程。此外,在使用opencv中的图像之前,尝试使用简单的数字或字符串进行一些练习,这样就更容易理解在如此漂亮的python数据结构的保护下发生了什么

您正在使用
'value'
作为键,因此您的字典只包含一个字符串
'value'
作为键的项。Ear-for-loop您正在用
cv2.imread
中的最后一个图像替换与字符串
'value'
关联的值

字典数据结构有2个属性,对于此类集合中的每个项,您都有一个键和一个值。使用
'value'
作为键(在
[]
运算符中),可以假定元素的键具有相同的键:字符串

尝试
打印len(resizedlist)
打印调整大小的列表
,看看会发生什么。Python在交互式编码方面非常优秀和酷,您可以轻松地使用打印进行调试

此代码正在工作,并将给定路径中找到的所有图像(作为numpy数组,这是python和opencv2的工作方式)放入一个字典中,其中键的数字范围为0到n(由
枚举
给出):

导入全局操作系统
进口cv2,numpy
路径='。/'
image_dict=dict()
对于i,在枚举中填充(glob.glob(os.path.join(path,*.jpg')):
img=cv2.imread(infle)
my_key=i#或者把你想要的任何东西作为钥匙放在这里
image\u dict[my\u key]=img
#打印图像
打印透镜(图像)
打印图像_dict[0]#这是与键0关联的值
打印图像_dict.keys()#这是所有键的列表
打印类型(image_dict.keys()[0])#这是
打印类型(image_dict.values()[0])#这是
为了更好地理解dict在python中的工作方式,请尝试使用
my_key=str(i)
,并查看打印调试代码的变化


我希望这有助于理解你的问题

请您澄清一下-在哪里存储和检索代码?它现在工作吗?如果您更改代码,请在回答中通知否,它不工作,因为它不拍摄任何图像。有没有什么方法可以让我把图像转换成数据结构,这样我就可以很容易地检索到匹配的图像。打印图像[0]时出现了错误,错误是keyError:0,我使用“zip”将键与值结合起来。dict,
len(image\u dict[0])
有多长?如果为零,则表示无法加载任何图像。。是否确实正确加载了图像?使用
[]运算符
组合键和值。。写入:
d=dict();d[0]=“a”
表示您正在将值“a”与键0关联。。
import glob, os
import cv2, numpy

path = './'
image_dict = dict()

for i,infile in enumerate(glob.glob(os.path.join(path,'*.jpg'))):
    img = cv2.imread(infile)
    my_key = i                 # or put here whatever you want as a key
    image_dict[my_key] = img

#print image_dict
print len(image_dict)
print image_dict[0] # this is the value associated with the key 0
print image_dict.keys() # this is the list of all keys
print type(image_dict.keys()[0]) # this is <type 'int'>
print type(image_dict.values()[0]) # this is <type 'numpy.ndarray'>