我如何可互换地处理来自 2 个列表的对象

Posted

技术标签:

【中文标题】我如何可互换地处理来自 2 个列表的对象【英文标题】:How do i process objects from 2 lists interchangeably 【发布时间】:2015-11-30 03:02:46 【问题描述】:

我正在使用 opencv 和 python 来处理图像,但是我遇到了一个问题,我似乎无法处理我存储彩色图像及其对应掩码的 2 个列表,为此问题我简化了代码,只显示图像而不处理它们。一旦我运行它,第一个彩色图像显示一次,所有的蒙版都被迭代,然后第二个彩色图像出现,再次,蒙版迭代。我希望它们显示为 2 组(同时显示 1 种颜色和 1 个蒙版),然后,当按下按钮时,列表 1 和 2 中的第二组图像出现..等等。

mypath = os.path.join('c:\\trainstcolor')
mypath2 = os.path.join('c:\\trainst')

images = list()
images2 = list()

for item in os.listdir(mypath):
   image = cv2.imread(os.path.join(mypath,item))
   images.append(image)
   small = cv2.resize(image, (0,0), fx=0.5, fy=0.5)
   hsv = cv2.cvtColor(small, cv2.COLOR_BGR2HSV)
   cv2.imshow('hsv',hsv)
   cv2.waitKey(0)
   cv2.destroyAllWindows()
   for item2 in os.listdir(mypath2):
     image2 = cv2.imread(os.path.join(mypath2, item2))
     images2.append(image2)
     small2 = cv2.resize(image2, (0,0), fx=0.5, fy=0.5)
     imgray = cv2.cvtColor(small2,cv2.COLOR_BGR2GRAY)
     cv2.imshow('hsv2',imgray)
     cv2.waitKey(0)
     cv2.destroyAllWindows()

【问题讨论】:

【参考方案1】:

有几种方法可以做到这一点。一种简单的方法是创建两个列表并在 while 循环中弹出元素。它还允许您检查它们的长度是否相同——如果我理解正确,您希望它们是相同的。

...
color_list = os.listdir(mypath)
mask_list = os.listdir(mypath2)

assert len(color_list) == len(mask_list)

while color_list:
    color_item = color_list.pop(0)
    mask_item = mask_list.pop(0)
    color_image = cv2.imread(os.path.join(mypath, color_item))
    ....

【讨论】:

非常感谢,简单有效:)

以上是关于我如何可互换地处理来自 2 个列表的对象的主要内容,如果未能解决你的问题,请参考以下文章

多个可互换视图 (MFC/C++)

具有可互换持久层的应用程序

统计可互换矩形的组数的个数

Leetcode刷题100天—5868. 可互换矩形的组数(哈希)—day36(周赛)

带有可互换字母的字符串

jQuery实现两个按钮的位置互换