首页 > 解决方案 > 按每个图像的平均像素值对图像列表进行排序

问题描述

我有一个灰度枕头图像列表。我想根据每个图像的平均像素值对该列表进行排序。

我最近的尝试如下:

def getTiles(tiles_directory):    
    files = os.listdir(tiles_directory)
    tiles = []
    for file in files:
        filePath =os.path.abspath(os.path.join(tiles_directory, file))
        try:
            fp = open(filePath, "rb")
            im = Image.open(fp)            
            im = ImageOps.grayscale(im)            
            
            tiles.append(im)
            im.load()
            fp.close()
        except:
            print("Invalid tile: %s" % (filePath,))
    return (tiles)

input_tiles = getTiles(file_repository)

images_sorted_by_ave_pixel = sorted(
    input_tiles, key=lambda x: ImageStat.Stat(x).mean)

但我收到一个错误:

  File "StitchMosaic.py", line 351, in generate
sorted_tiles=sortTiles(tiles)
  File "StitchMosaic.py", line 50, in sortTiles
byAvePixel = sorted(tiles, key=lambda x: ImageStat.Stat(x).mean)
  File "StitchMosaic.py", line 50, in <lambda>
byAvePixel = sorted(tiles, key=lambda x: ImageStat.Stat(x).mean)
  File "/Users/stuartfish/opt/anaconda3/lib/python3.8/site-packages/PIL/ImageStat.py", line 39, in __init__
raise TypeError("first argument must be image or list")

TypeError: first argument must be image or list

我做错了什么?

标签: pythonlistimagesorting

解决方案


谢谢大家。答案是我的一个简单错误 - #Vishal Kumar Sahu 强调 - type() 方法的存在将使我的调试更加容易:)

尽管我的变量名称很长,但我仍然设法传递一个字符串而不是图像对象列表。


推荐阅读