如何在字典中存储图像集,并使用python opencv检索它
我有一个字典,我把图像作为值,索引作为键,我使用zip函数存储它,当我试图检索它时,它不显示图像。我所做的是:如何在字典中存储图像集,并使用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
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'>