如何按宽高比对图像进行排序

Posted

技术标签:

【中文标题】如何按宽高比对图像进行排序【英文标题】:How to sort images by aspect ratio 【发布时间】:2021-10-14 06:42:58 【问题描述】:

我想按宽高比对图片进行排序,然后使用MPV浏览它们,我从谷歌得到了一些代码:

identify * |
    gawk 'split($3,sizes,"x"); print $1,sizes[1]/sizes[2]' |
    sed 's/\[.\]//' | sort -gk 2

这是一个输出:

28.webp 0.698404
1.webp 0.699544
27.webp 0.706956
10.webp 0.707061
25.webp 0.707061
9.webp 0.707061
2.webp 0.707241
22.webp 1.41431
23.webp 1.41431
24.webp 1.41431

然后我做了一些调整以适应我的需要:

identify * |
    gawk 'split($3,sizes,"x"); print $1,sizes[1]/sizes[2]' | 
    sed 's/\[.\]//' | sort -gk 2 |
    gawk 'print $1' |
    mpv --no-resume-playback --really-quiet --playlist=-

它有效,但并不完美。它不能处理带空格的文件名,而且identifyexiftool 慢,尤其是在处理WebP 格式时,此外,exiftool 有一个-r 选项,所以我想使用exiftool 来获得这个输出相反,但我不知道如何处理exiftool -r -s -ImageSize 的输出,有人可以帮助我吗?

【问题讨论】:

edit 你的问题要显示简洁、可测试的样本输入(如果是identify *,则输出,而不是通过管道传输到你现有的 awk+sed 命令的输出,这些命令不能执行你想要的操作)以及在给定该输入的情况下您想要的最终预期输出。显然,如果您想从exiftool -r -s -ImageSize 输出而不是identify 输出开始,则显示该输出而不是identify * 的输出作为示例输入。 图片没有Exif信息怎么办? 【参考方案1】:

使用exiftool,您可以使用exiftool -p '$filename $ImageSize;m/(\d+)x(\d+)/;$_=$1/$2' /path/to/files | sort -gk 2

这将使输出的格式与您的示例相同,我假设相同的sort 命令可以使用它。如果没有,则需要编辑 sort 部分。

【讨论】:

【参考方案2】:

使用identify显示纵横比和图像文件名,无需额外计算

identify -format '%f %[fx:w/h]\n' *.jpg | sort -n -k2,2
file1.jpg 1
file2.jpg 1.46789
file6.jpg 1.50282
file5.jpg 1.52
file7.jpg 1.77778
file3.jpg 1.90476

关于identifyexiftool 的性能,identify 的调用次数更少,但exiftool 看起来更快

strace -c identify -format '%f %[fx:w/h]\n' *.jpg 2>&1 | grep -E 'syscall|total'
% time     seconds  usecs/call     calls    errors syscall
100.00    0.001256                   867        43 total

strace -c exiftool -r -s -ImageSize *.jpg 2>&1 | grep -E 'syscall|total'
% time     seconds  usecs/call     calls    errors syscall
100.00    0.000582                  1138       311 total

【讨论】:

identify * 更慢,identify -format '%f %[fx:w/h]\n' * 最慢,这就是为什么我选择exiftool 并且任何图像都有ImageSizeinfo。

以上是关于如何按宽高比对图像进行排序的主要内容,如果未能解决你的问题,请参考以下文章

python opencv图像缺陷比对(轮廓比对)

图像视频相似度算法

OpenCV对图像进行尺寸变换

如何对具有图像的网格视图列进行排序

计算机视觉图像分类目标检测人脸比对人脸识别语义分割实例分割图像搜索

图像比对的原理或者算法