我有一个字典,在那里我把图像作为值和索引作为键,我使用zip函数存储它,当我试图检索它时,它不显示图像。我所做的是:
pth = 'D:6th semMajor projectCode'
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包含从0开始直到n-1的数字。有没有办法检索图像从字典基于它的关键?我一直在努力,但我仍然没有得到适当的结果,我不知道我的代码是否正确。所以我问你的建议,我有一个49张图片的数据集,我需要把所有的图片放在一个字典里,这样我就可以随机检索图像使用它的键值。
提前感谢!
我不太明白你的代码和你的回答,特别是我不明白你的代码的zip
部分
无论如何,我假设你想要一个字典,其中一个数字作为键,一个图像作为与键相关的值。
我认为你对dict
在python中的工作方式有些困惑,你应该研究一下它。谷歌有很多关于python字典的好教程。此外,在使用opencv中的图像之前,尝试用简单的数字或字符串练习一下,这样更容易理解如此漂亮的python数据结构下发生的事情。
您使用'value'
作为键,因此您的字典只包含一个项目,字符串'value'
作为键。在for循环中,您正在用cv2.imread
中的最后一张图像替换与字符串'value'
相关的值。
字典数据结构有2个属性,对于这种类型集合中的每个项,您有一个键和一个值。使用'value'
作为键(在[]
操作符中),您假设元素的键具有相同的键:字符串。
尝试print len(resizedlist)
和print resized list
,看看会发生什么。Python在交互式编码方面是如此优秀和酷,你可以很容易地通过打印进行调试。
这段代码正在工作,并将在给定路径中找到的所有图像(作为numpy数组,这是python和opencv2的工作方式)放在一个字典中,其中键是从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)
,并查看打印调试代码的变化。
我希望它有帮助,希望已经理解你的问题!!