马赛克画 用Python生成马赛克画

Python数据分析课程培训报名!
1月17-20日,全国高校Python数据分析与实训课程高级研讨会(厦门)
在线注册(复制到浏览器):
https://wj.qq.com/s/2879798/9463
作者|申中强
来源| Python和数据分析(授权)
你知道什么是马赛克画吗?不是动作片里的马赛克~ ~
马赛克画是由小图组成的大图。这篇文章的封面是我们的效果图。放大看细节。每一块都是独立的画面,放在一起形成一个大画面。感觉像是马赛克组成的画面,所以叫马赛克画。在网上看到一些马赛克,觉得很酷,就用Python把一张原图转换成马赛克。
我们的效果图是这样的

马赛克画 用Python生成马赛克画


文章图片

原图是这样的

马赛克画 用Python生成马赛克画


文章图片

具体实现思路如下
第一步:首先,收集一组图片,这些图片将作为大图片中的小方块图片。图片越多,最终图片的颜色越接近。
第二步:把要转换的图像分成小方块,如下

马赛克画 用Python生成马赛克画


文章图片

第三步:对于每个小方块图片,用图片集中最近的图片替换。在所有的小方块被替换后,我们最终的马赛克画就生成了。
听起来不是很简单吗?
我们来看看具体的实现步骤。下面是一些核心代码。完整代码可以在微信官方账号后台回复“马赛克”获得。
我们的图片集合存在于images目录中,下面的代码加载目录中的所有图片,并将它们缩放到统一的大小
进口
importos
importcv2
importnumpy asnp
从qdm导入
IMG_DIR = "图像"
defload_all_images(tile_row,tile_col):
img_dir = IMG_DIR
filenames = os.listdir(img_dir) 文件名= os.listdir(img_dir)
结果= []
打印(len(文件名))
forfilename intqdm(文件名):
ifnotre.search(" .jpg "/>
放大图中的局部细节如下

马赛克画 用Python生成马赛克画


文章图片

如果对画质不满意,想要更精细的画质,可以考虑在分割的时候把画面分割成更小的方块,但是这样也会增加程序的运行时间。
生成图片的过程非常耗时。考虑到性能原因,原程序采用多进程并行处理。
完整代码已经上传到github,微信官方账号回复“马赛克”获取地址。
-结束-
【马赛克画 用Python生成马赛克画】

马赛克画 用Python生成马赛克画


文章图片

    推荐阅读