如何交替处理来自2个列表的对象

时间:2015-11-30 03:02:47

标签: python opencv file-manager

我使用opencv和python来处理图像,但是我遇到了问题,我似乎无法处理我可以交替存储彩色图像及其相应掩码的2个列表,为了这个问题,我简化了代码,只显示图像而不处理它们。一旦我运行它,第一个彩色图像显示一次,所有的掩码都被迭代,然后第二个彩色图像出现,再次,掩码迭代。我希望它们以2组(同时1个颜色和1个掩码)出现,然后,当按下按钮时,列表1和2中的第二组图像。 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 个答案:

答案 0 :(得分:0)

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