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

时间:2014-03-21 10:36:32

标签: 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 = 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()    

path包含系统中一组图像的路径。 resizedlist_key包含从零开始直到n-1的数字。有没有办法从基于它的密钥中检索字典中的图像? 我一直在努力,但仍然没有得到正确的结果,我也不知道我的代码是否正确。所以我问你的建议,我有49个图像的数据集,我需要将所有图像放在字典中,以便我可以使用其键值随机检索图像。

提前致谢!

1 个答案:

答案 0 :(得分:1)

我不太了解您的代码和答案,特别是我不理解代码的zip部分。

无论如何,我假设您想要一个带有数字作为键的字典和一个与键相关联的值的图像。

我认为你对dict如何在python中工作有些困惑,你应该稍微研究一下。 Google充满了关于python中dicts的精彩教程。此外,在使用opencv中的图像之前,尝试使用简单的数字或字符串练习一点,更容易理解在如此好的python数据结构的引擎下发生的事情。

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

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

尝试print len(resizedlist)print resized list,看看会发生什么。 Python在交互式编码方面非常好用,你可以用打印件轻松调试。

此代码正在运行并将所有在给定路径中找到的图像(作为python和opencv2工作方式的numpy数组)放在字典中,其中键的编号从0到n(由enumerate给出):

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'>

要更好地了解dict如何在python中运行,请尝试使用my_key = str(i),并查看打印调试代码的更改方式。

我希望它有所帮助并希望能够理解你的问题!!