如何在字典中存储图像集合,并使用Python OpenCV进行检索

0 投票
1 回答
3529 浏览
提问于 2025-04-17 23:16

我有一个字典,里面的值是图片,索引是键。我是用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 个回答

1

我不太明白你的代码和你的回答,特别是你代码中的 zip 部分。

不过,我猜你想要的是一个字典,里面的键是数字,值是和这些键关联的图片。

我觉得你对 Python 中字典的工作原理有些混淆,建议你多了解一下。网上有很多关于 Python 字典的好教程。另外,建议你先用简单的数字或字符串练习一下,再用 OpenCV 的图片,这样更容易理解 Python 数据结构背后的运作原理。

你把 'value' 当作键使用,这样你的字典里只有一个项,键就是字符串 'value'。在每次循环中,你都在用 cv2.imread 读取的最后一张图片替换这个键对应的值。

字典这种数据结构有两个特点:每个项都有一个键和一个值。你用 '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'>

为了更好地理解 Python 中字典的工作原理,试着用 my_key = str(i),看看你的打印调试代码会有什么变化。

希望这能帮到你,也希望我理解了你的问题!!

撰写回答