我如何可互换地处理来自 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 个列表的对象的主要内容,如果未能解决你的问题,请参考以下文章