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

How do i process objects from 2 lists interchangeably

我正在使用 opencv 和 python 来处理图像,但是我遇到了一个问题,我似乎无法处理我在其中交替存储彩色图像及其相应蒙版的 2 个列表,为了这个问题,我简化了代码,只显示图像而不处理它们。一旦 i 运行 它,第一个彩色图像显示一次,并迭代所有蒙版,然后第二个彩色图像出现,蒙版再次迭代。我希望它们以 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()

有几种方法可以做到这一点。一种简单的方法是制作两个列表并在 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))
    ....