Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image 从给定的一组缩略图生成照片马赛克_Image_Dynamic Image Generation_Image Generation_Photographic Mosaic - Fatal编程技术网

Image 从给定的一组缩略图生成照片马赛克

Image 从给定的一组缩略图生成照片马赛克,image,dynamic-image-generation,image-generation,photographic-mosaic,Image,Dynamic Image Generation,Image Generation,Photographic Mosaic,是一种将现有图像重新生成为缩略图马赛克的技术。原始像素的颜色应大致类似于覆盖瓷砖的颜色 例如,a 是的,但它非常适合特定的世界地图任务 是否有一个通用的解决方案可以将现有图像重新生成为一组给定缩略图的拼贴/马赛克?概念验证如下,作为一个简单的bash脚本,使用ImageMagick执行图像处理工作 #!/bin/bash # Take all JPEGS in current directory and get their average RGB color and name in "til

是一种将现有图像重新生成为缩略图马赛克的技术。原始像素的颜色应大致类似于覆盖瓷砖的颜色

例如,a

是的,但它非常适合特定的世界地图任务


是否有一个通用的解决方案可以将现有图像重新生成为一组给定缩略图的拼贴/马赛克?

概念验证如下,作为一个简单的
bash
脚本,使用ImageMagick执行图像处理工作

#!/bin/bash

# Take all JPEGS in current directory and get their average RGB color and name in "tiles.txt"
for f in *.jpg; do convert $f -depth 8 -resize 1x1! -format "%[fx:int(mean.r*255)] %[fx:int(mean.g*255)] %[fx:int(mean.b*255)] $f\n" info: ; done > tiles.txt

# Create empty black output canvas same size as original map
convert map.png -threshold 100% result.png

# Split map into tiles of 10x10 and get x,y coordinates of each tile and the average RGB colour
convert map.png -depth 8 -crop 10x10 -format "%X %Y %[fx:int(mean.r*255)] %[fx:int(mean.g*255)] %[fx:int(mean.b*255)]\n" info: | 
   while read x y r g b; do
      thumb=$(awk -v R=$r -v G=$g -v B=$b '
         NR==1{nearest=3*255*255*255;tile=$4}
         { 
            tr=$1;tg=$2;tb=$3
            # Calculate distance (squared actually but sqrt is slow)
            d=((R-tr)*(R-tr))+((G-tg)*(G-tg))+((B-tb)*(B-tb))
            if(d<nearest){nearest=d;tile=$4}
         }
         END{print tile}
      ' tiles.txt)
      echo $x $y $r $g $b $thumb
      convert result.png -draw "image copy $x,$y 10,10 \"$thumb\"" result.png
   done

概念证明如下,作为一个简单的
bash
脚本,使用ImageMagick执行图像处理工作

#!/bin/bash

# Take all JPEGS in current directory and get their average RGB color and name in "tiles.txt"
for f in *.jpg; do convert $f -depth 8 -resize 1x1! -format "%[fx:int(mean.r*255)] %[fx:int(mean.g*255)] %[fx:int(mean.b*255)] $f\n" info: ; done > tiles.txt

# Create empty black output canvas same size as original map
convert map.png -threshold 100% result.png

# Split map into tiles of 10x10 and get x,y coordinates of each tile and the average RGB colour
convert map.png -depth 8 -crop 10x10 -format "%X %Y %[fx:int(mean.r*255)] %[fx:int(mean.g*255)] %[fx:int(mean.b*255)]\n" info: | 
   while read x y r g b; do
      thumb=$(awk -v R=$r -v G=$g -v B=$b '
         NR==1{nearest=3*255*255*255;tile=$4}
         { 
            tr=$1;tg=$2;tb=$3
            # Calculate distance (squared actually but sqrt is slow)
            d=((R-tr)*(R-tr))+((G-tg)*(G-tg))+((B-tb)*(B-tb))
            if(d<nearest){nearest=d;tile=$4}
         }
         END{print tile}
      ' tiles.txt)
      echo $x $y $r $g $b $thumb
      convert result.png -draw "image copy $x,$y 10,10 \"$thumb\"" result.png
   done

不会那么难的。将大图像平铺成所需大小的平铺,并获得每个平铺的平均颜色-这是ImageMagick的一行。将所有缩略图调整为所需的瓷砖大小,并获得每个缩略图的平均颜色-另一行ImageMagick。浏览大图像,并为其中的每个瓷砖选择最接近的匹配缩略图以进行马赛克输出。不,你是对的,这真的没有那么难,但如果有一个漂亮的、现有的,这方面的开源解决方案(我可能会对此做出贡献),不会那么难。将大图像平铺成所需大小的平铺,并获得每个平铺的平均颜色-这是ImageMagick的一行。将所有缩略图调整为所需的瓷砖大小,并获得每个缩略图的平均颜色-另一行ImageMagick。浏览大图像,并为其中的每个瓷砖选择最接近的匹配缩略图以进行马赛克输出。不,你是对的,这真的没有那么难,但如果有一个漂亮的、现有的,这方面的开源解决方案(我可能对此有所贡献)。哇!您已经从imagemagick、awk和bash中挤出了令人惊叹的东西,并将所有内容组合到一段极其紧凑和优雅的代码中。非常感谢。然而,这真的让我想知道是否有开源的解决方案,如果没有,让我想写一个。去吧!并添加一个链接回到这里,当你做了宣传它!哇!您已经从imagemagick、awk和bash中挤出了令人惊叹的东西,并将所有内容组合到一段极其紧凑和优雅的代码中。非常感谢。然而,这真的让我想知道是否有开源的解决方案,如果没有,让我想写一个。去吧!并添加一个链接回到这里,当你做了宣传它!