项目实战!如何用Python生成马赛克画

开发 后端
马赛克画是一张由小图拼成的大图,本文的封面就是我们的效果图,放大看细节,每一块都是一张独立的图片,拼在一起组成一张大图,感觉像是用马赛克拼出来的画,所以叫马赛克画。

大家知道马赛克画是什么吗?不是动作片里的马赛克哦~~

马赛克画是一张由小图拼成的大图,本文的封面就是我们的效果图,放大看细节,每一块都是一张独立的图片,拼在一起组成一张大图,感觉像是用马赛克拼出来的画,所以叫马赛克画。看到网上的一些马赛克画觉得很酷,于是自己用Python实现了一下将一张原图转换成马赛克画。

我们的效果图是这样的

原图是这样的

实现的具体思路是这样

***步:首先收集一组图片,这些图片会作为大图中的小方格图片。图片越多,***生成的图片颜色越接近。

第二步:将要转换的图片分割成一个一个小方格图片,像下面这样

第三步:对于每一个小方格图片,取图片集里面最接近的图片替换。所有小方格都替换后,就生成了我们最终的马赛克画。

听上去是不是很简单?

我们来看一下具体的实现步骤,下面是一些核心代码。完整代码可在公众号后台回复“mosaic”获取。

我们的图片集存在images目录下,下面的代码加载目录下所有的图片,并缩放成统一的尺寸

这里load_all_images函数的参数就是统一后的尺寸,tile_row和tile_col分别对应高和宽。

下面的代码对要转换的图片进行分割

我们将要转换的图片分割成一个个小方格,tile_row和tile_col是小方格的高和宽,roi存取小方格中的图片数据。

面是计算两张图片相似度的函数

im1和im2是两张图片的数据,图片数据是一个三维的numpy数组,这里我们将三维数组转换成一维数组后,比较两者的欧式距离。之后要找出最相似的图片,只需遍历图片集中所有的图片,找到距离最短的那张图片,去替换原图中的小方格就可以了。

我们再来看一下最终实现的效果

放大图中局部的细节如下

如果对图片的画质不满意,想要更精细的画质,可以考虑在分割的时候把图片分割成更小的方格,不过这样也会增加程序运行的时间。

生成图片的过程比较耗时,考虑到性能原因,原程序中使用多进程的方式并行处理。

责任编辑:庞桂玉 来源: 今日头条
相关推荐

2009-08-17 13:07:27

C#马赛克算法

2022-09-07 08:37:34

DCGAN图片AI

2020-12-09 14:18:46

AI 技术马赛克

2018-07-03 08:50:12

人工智能深度学习CNN

2011-08-18 15:56:03

深信服广域网优化

2015-04-30 10:29:32

WOC视频会议优化方案深信服

2021-02-24 10:19:43

人工智能马赛克

2012-03-16 16:33:35

视频会议马赛克深信服

2021-05-31 10:30:46

密码马赛克工具

2023-11-22 11:20:38

2012-05-25 14:41:19

JavaScript

2021-01-04 05:36:23

AI人工智能深度学习

2020-12-02 15:07:23

算法开源AI

2015-10-15 17:31:14

微软

2020-05-07 11:03:32

AI 马赛克工具

2017-02-09 07:50:32

复原马赛克科技新闻早报

2017-02-10 18:13:46

谷歌大脑人工智能

2020-06-18 11:10:16

AI人工智能神经网络

2021-03-01 11:37:31

人工智能PULSE

2018-08-13 10:22:09

点赞
收藏

51CTO技术栈公众号