【问题标题】:Sorting a list of images by the average pixel value of each image按每个图像的平均像素值对图像列表进行排序
【发布时间】:2021-08-15 19:00:40
【问题描述】:

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

我最近的尝试如下:

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

我做错了什么?

【问题讨论】:

  • 你能发布更多你的代码吗?比如你在哪里创建list_of_images
  • 使用type 方法来了解您作为参数传递的内容。
  • 另外请粘贴完整的错误堆栈跟踪。
  • return (tiles) --> return tiles
  • 谢谢大家。 #Vishal Kumar Sahu,我将按照建议使用类型方法。 #balderman 我尝试删除退货声明中的括号,但没有任何区别。这可能是一个非常基本的错误,因为这是我第一次尝试 python。

标签: python list image sorting


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2020-05-07
    • 1970-01-01
    • 2018-08-16
    • 1970-01-01
    • 2018-06-08
    • 2018-11-13
    • 1970-01-01
    • 2012-11-01
    • 2020-09-04
    相关资源
    最近更新 更多