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

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

封面的原图是这样的

实现的具体思路是这样

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

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

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

听上去是不是很简单?

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

import 

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

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

img 

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

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

from 

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

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

放大图中局部的细节如下

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

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

python三维数据转换成二维_用Python生成马赛克画相关推荐

  1. python三维数据转换成二维_5大Python可视化库到底选哪个好?一篇文章搞定从选库到教学...

    最近和鲸社区的大佬们,竟不约而同地写起了可视化库的教程,开始了掰头 ※完整教程列表在文末附录 虽然对于我们这种吃瓜群众来说是件好事,但 大概大佬的快乐往往就是那么的朴实无华且枯燥吧.害,管他呢,赶紧拿 ...

  2. python三维数据转换成二维_Python = 48/365

    ● Python = 48/365 ● 有了数据就有了一切!回到枯燥而重要的数据部分.数据有趣吗?当然,当然.今日结合图像处理来个硬货! 日更不停,你看行不行? 我带着你,你带着Python Flag ...

  3. python三维数据转换成二维_Python科学计算全生态工具锦集

    没关注?  伸出手指点这里 AI Python目前是与科学计算结合最好的一门编程语言,包括大数据分析.机器学习.人工智能.可视化,甚至是天文学.生物学(神经科学).量子力学等等都有强大的工具包支持 P ...

  4. 数据转换成二维码并导出进Excel中和导入时解码二维码反转成数据

    数据转换成二维码并导出进Excel中和导入时解码二维码反转成数据 第一步在maven中配置需要的二维码jar包 1.1 谷歌提供的帮助类 1.2 关于二维码的工具类 1.3 测试类 第二步 在Exce ...

  5. xlsx.full.js读取Excel数据转换成二维数组,sheet_to_array

    xlsx.full.js读取Excel的sheet数据转换成二维数组,sheet_to_array 解析sheet数据为二维数组 测试方法 效果 鉴于js-xlsx.js没有XLSX.util.she ...

  6. python将文件数据转换成二维列表

    贴一个做数据清洗时写的代码, 做数据处理时,原文件数据在进行处理时需要转换成一定格式, 原始文件数据:123.txt 1,3,4 2,3,5 1,2,3,5 2,5 利用Python转换成二维列表: ...

  7. Python 将Excel一维数据转换成二维数据透视表

    目录 目的 操作步骤 创建文件目标文件并放置在对应目标文件夹 打开JupyterNotebook 步骤1:在 D:\ProgramProject\JupyterNotebook\dealExcel 步 ...

  8. 一连串数字怎么转换成二维码?数字生成二维码如何制作?

    当我们使用二维码内容做成数字时该如何制作呢,比如做成标签码,序号码,号码牌等等,都可以使用数字二维码来展示,那么如何操作才能将一连串数字做成二维码呢?下面给大家分享一下数字静态二维码和数字微信活码的制 ...

  9. python 三维矩阵乘以二维矩阵_如何将一个二维数组和一个三维数组矩阵相乘得到一个三维数组?...

    问题是numpy把多维数组看作矩阵的栈,最后两个维总是假定为线性空间维.这意味着点积不能通过折叠3d数组的第一个维度来工作.在 相反,你能做的最简单的事情就是把你的3d数组重塑成2d数组,做矩阵乘法, ...

最新文章

  1. 800名科学家Nature联名发文主张废除p值!
  2. python scapy 函数_【python|scapy】sprintf输出时raw_string转string
  3. 2高并发服务器:多线程服务器
  4. bool类型数组转换成一个整数_Go 学习笔记 02 | 基本数据类型以及 byte 和 rune 类型...
  5. HBase 架构详解
  6. linux 必知命令
  7. 实训汇编语言设计——内存多字节10进制数相加
  8. 互联网的未来之下:政权 金权 人权 无关平权
  9. 受控文本生成任务简述
  10. python中itertools groupby函数是干嘛的_python 分组函数 itertools groupby
  11. [ABAP] Debug心得
  12. java asm 中文文档_ASM 简介
  13. Java版2048小游戏
  14. 微信小程序转发功能详解
  15. 从汉语与英语最常用字词,分析汉语与英语的异同(一)
  16. WINDOWS 2003设置攻略
  17. 2019前端工程师的自检清单
  18. 力扣(Leetcode)695. 岛屿的最大面积(Java)带注释
  19. iphone6 触摸屏测试软件,iPhone 6 触摸屏 “乱跳” 维修案例
  20. 淘宝新手开店不使用直通车,应该怎么去进行做呢?

热门文章

  1. 如何选择正确的Node框架:Express,Koa还是Hapi?
  2. VisionPro软件介绍
  3. 第三章 国外信托公司业务
  4. Markdown任务列表(实现列表勾选/非勾选操作)
  5. 1px dotted 在IE6下不支持
  6. 【杂谈】嵌入式软件数据结构的特点
  7. 计算机任务管理器设置软件启动,电脑软件开机自动启动,教你一招禁止启动,能够有效提升开机速度...
  8. VC++6.0 win32 控制台应用程序 简单应用 附代码
  9. 商户号该产品权限未开通,请前往商户平台,产品中心检查后重试
  10. 业界红包玩法与技术方案总结