我使用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()
答案 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))
....