【问题标题】:Sorting a list of Image Matrices (Numpy nd arrays) by image size按图像大小对图像矩阵(Numpy nd 数组)列表进行排序
【发布时间】:2012-11-01 04:23:13
【问题描述】:

我有一组矩阵作为列表中的 numpy 二维数组。它们有不同的尺寸(19x19 到 63x63)。现在,我必须从最小的尺寸开始排列它们。我输入的矩阵如下:

pics=[]
templates=[]

c1=0
for c1 in range(1,31):
    i1=Image.open("data/"+str(c1)+".gif")
    pmat = numpy.asarray(i1)
    pics.append(i1)
    templates.append(pmat)

因此,模板是包含所有图像矩阵的列表。 pmat 当然,包含图像本身。有什么简单的方法可以解决这个问题吗?......

【问题讨论】:

    标签: python sorting image-processing numpy multidimensional-array


    【解决方案1】:

    您可以按长度对图像列表进行排序,如下所示:

    >>> import numpy 
    >>> a = numpy.array([1,2,3])
    >>> b = numpy.array([1,3])
    >>> c = [a,b]
    [array([1, 2, 3]), array([1, 3])]
    >>> sorted(c,key=len)
    [array([1, 3]), array([1, 2, 3])]
    

    如果您的图像数组都是正方形的(即 x-len = y-len),那么这对您的目的应该没有问题。

    编辑:如果您需要更大的灵活性(对于非方形图像),您可以使用key=numpy.size。

    【讨论】:

    • 按numpy.size排序更灵活,不需要所有矩阵都是方阵。
    • @COpython 我刚刚意识到这一点。我已经编辑了我的帖子。谢谢!
    • 如果我决定使用图像矩阵,即 pmat 而不是模板怎么办?
    • @gran_profaci pmat 是图像的 numpy 数组表示。您是在谈论对图像中的实际像素进行排序吗?还是您在谈论排序pics?如果你在pics 数组上运行sorted,你应该得到相同的结果,尽管你需要使用类似key=Image.size 的东西。我不完全确定;在此处查看页面底部:pythonware.com/library/pil/handbook/image.htm
    • @gran_profaci 好的,我测试了一些东西。如果你想对pics进行排序,你可以这样:sorted(pics,key=operator.attrgetter('size'))。您将需要import operator。希望对您有所帮助。
    【解决方案2】:

    你想要做的是按size排序...

    templates.sort(key=numpy.size)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-08
      • 1970-01-01
      • 2020-05-07
      • 2012-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-02
      相关资源
      最近更新 更多