python for循环中有多个列表,numpy shape命令需要列表输入?

lmvvr0a8  于 2023-01-01  发布在  Python
关注(0)|答案(1)|浏览(126)

我创建了以下for循环

for ItemTemplate in ItemTemplates:
    x = 0
    self.needle_images.append(cv.imread(ItemTemplate, cv.IMREAD_UNCHANGED))
    self.needle_widths.append(self.needle_images[x].shape[1])
    self.needle_heights.append(self.needle_images[x].shape[0])
    x = x+1

我最初尝试这样编写for循环:

for ItemTemplate in ItemTemplates:
    self.needle_images.append(cv.imread(ItemTemplate, cv.IMREAD_UNCHANGED))
    self.needle_widths.append(self.needle_images.shape[1])
    self.needle_heights.append(self.needle_images.shape[0])

我假设我不需要在这段代码中添加列表条目,也许有更好的方法来完成这项工作,但我的Python技能还很年轻。上面的例子很好,我的代码运行起来也不错,但我希望看看是否有更好的方法来完成这项任务。

1rhkuytd

1rhkuytd1#

我不知道为什么要把imagewidthheight存储在三个列表中,因为image已经把width和height作为它的shape成员了,你已经在使用了。因为x将始终保持0,这样所有即将到来的图像将具有第一个图像的大小。因为您尝试获取数组的shape成员,所以无法正常工作。

我会做出的改变

如果你需要索引(在你的例子中是x),我会使用enumerate()函数来获取它:

for x, ItemTemplate in enumerate(ItemTemplates):
    # x : index starting from 0
    ...

你也可以先把图像放到一个局部变量中,然后再添加它:

for ItemTemplate in ItemTemplates:
    img = cv.imread(ItemTemplate, cv.IMREAD_UNCHANGED)
    self.needle_images.append(img)
    self.needle_widths.append(img.shape[0]) # if needing to store widths in own array
    ...

如果你不想从shape成员中得到widthheight,你可以把Image保存在一个类或者dict中,保存在两个独立的成员widthheight中,虽然这和只使用shape没有太大区别,所以如果for循环没有得到更多的功能,我会写:

for ItemTemplate in ItemTemplates:
    self.needle_images.append(cv.imread(ItemTemplate, cv.IMREAD_UNCHANGED))

并使用shape成员表示大小,因为在以后使用shape值时,您总是可以将其存储在局部变量中:

for img in self.needle_images:
    width, height, channels = img.shape
    display.blit(img, (width, height)) # pseudo operation
    ...

相关问题