Image 如何将图像分割成小块,将其随机化,并将其放在一起

Image 如何将图像分割成小块,将其随机化,并将其放在一起,image,bash,Image,Bash,我想把一个图像(orig.jpg)切成16px×16px的片段,随机排列它们的顺序,然后把它们放在一个相同大小的新图像(jpg)上。基本上是马赛克效果,但没有顺序 分裂不是问题所在 convert -crop 16x16@ orig.jpg tile_%d.jpg 但我不知道如何随机把它们放在一起 montage 我想应该这样做。我以前做过,但找不到脚本:-S 全部使用:我需要颜色和亮度完全相同的图像,但不可能识别原始图像。您可以使用bash和ImageMagick这样做: #!/bin

我想把一个图像(orig.jpg)切成16px×16px的片段,随机排列它们的顺序,然后把它们放在一个相同大小的新图像(jpg)上。基本上是马赛克效果,但没有顺序

分裂不是问题所在

convert -crop 16x16@ orig.jpg  tile_%d.jpg
但我不知道如何随机把它们放在一起

montage 
我想应该这样做。我以前做过,但找不到脚本:-S


全部使用:我需要颜色和亮度完全相同的图像,但不可能识别原始图像。

您可以使用
bash
ImageMagick
这样做:

#!/bin/bash
convert -crop 16x16@ input.jpg tile.jpg
montage -geometry +0+0 $(ls tile*jpg | awk 'BEGIN{srand()}{print rand() "\t" $0}' | sort -n | cut -f2-) output.png

# Remember to remove the tile*jpg before you do another one :-)
# rm tile*jpg
基本上正如您所建议的,使用
-crop
蒙太奇
$()
中的位是进程替换,它将运行进程的结果放在括号内,并将其放入
蒙太奇
命令中。它列出了所有名为
tile*jpg
的文件和进入
awk
的管道,在每个文件的前面附加一个随机数,然后按随机数排序并将其切掉

所以它是这样的:

为此:

我已经做了进一步的实验(比如玩游戏),我发现你可以在瓷砖之间找到白线和缝隙。我不确定这些是否会困扰您,但如果它们困扰您,一个可能的解决方案是注意原始图像几何体,然后将其调整为16x16瓷砖大小的精确倍数。然后像以前一样继续,并在末端调整奇数0-15像素的大小,恢复到原始大小

如果有必要的话,我想到了这个:

#!/bin/bash
# Get original image geometry
origgeom=$(identify -format %g input.jpg)
echo $origgeom
# Calculate new geometry as exact multiple of tilesize
newgeom=$(convert input.jpg -format "%[fx:int(w/16)*16]x%[fx:int(h/16)*16]" info:)
echo $newgeom

# Resize to new geometry and tile
convert input.jpg -resize $newgeom -crop 16x16@ tile.jpg

# Rebuild in random order then correct geometry
montage -background none -geometry +0+0 $(ls tile*jpg | awk 'BEGIN{srand()}{print rand() "\t" $0}' | sort -n | cut -f2-) JPG:- | convert JPG: -resize ${origgeom}! output.jpg

这是一个更像问题描述的语句-您在Python中使用的是什么,您的数据类型是什么?向我们展示一些东西,以及你迄今为止所做的尝试!你不会得到一个完整的解决的例子。你试过什么?你被困在哪里了?这有什么意义?