python做马赛克图
今天教大家怎么用python做出如上图所示的二维码图,像上图是由很多小图片拼成的。
首先需要准备一大摞图片,用于拼图,可以爬一爬lol皮肤什么的。
讲一下思路吧:
- 将背景图分成一定像素的很多小块,并且计算每一个小块的平均颜色;
- 将组成图片缩小到对应像素大小,也计算平均颜色。
- 计算得出与每一个小块颜色最接近的组成图片,添加到对应位置。
import cv2 # pip3 install opencv-python
import glob
import numpy as np # pip3 install numpy
from tqdm import tqdm # 显示进度条的作用 pip3 install tqdm
from itertools import product # 生成迭代器, 可以生成笛卡儿积(所谓笛卡儿积,最后有相关说明)class Pic():def __init__(self, targetpath, outputpath, sourcepath, blocksize):self.targetpath = targetpath # 背景图self.outputpath = outputpath # 输出成果图片self.sourcepath = sourcepath # 组成图片self.blocksize = blocksize # 每一块的像素(大小一般15左右看着办)# 用于存放缩小后组成图片的列表self.sourceimages = []# 用于存放缩小后组成图片平均颜色的列表self.avgcolors = []# 缩小组成图片并计算平均颜色def readSourceImage(self):# 读取小图像,加入列表for img_path in tqdm(glob.glob("{}/*.jpg".format(self.sourcepath)), ncols=100):image = cv2.imread(img_path, cv2.IMREAD_COLOR) # 读取图片(设置颜色模式)image = cv2.resize(image, (self.blocksize, self.blocksize)) # 图片缩小,blocksize是函数需要的参数# 计算缩小图像得平均颜色avgcolor = np.sum(np.sum(image, axis=0), axis=0) / (self.blocksize*self.blocksize)# 添加到列表self.sourceimages.append(image)self.avgcolors.append(avgcolor)# 主函数def run(self):# 缩小组成图片并计算平均颜色self.readSourceImage() # 读取背景图像targetimage = cv2.imread(self.targetpath)outputimage = np.zeros(targetimage.shape, np.uint8) # 创建一个全部为0得数组,形状大小为图片大小; np.uint8为数组中值得类型# 制作马赛克图像for i, j in tqdm(product(range(int(targetimage.shape[0]/self.blocksize)), range(int(targetimage.shape[1]/self.blocksize)))): # 循环笛卡儿积的结果block = targetimage[i*self.blocksize: (i+1)*self.blocksize, j*self.blocksize: (j+1)*self.blocksize, :] # 定义马赛克得位置(数组)avgcolor = np.sum(np.sum(block, axis=0), axis=0) / (self.blocksize*self.blocksize) # 计算该马赛克得平均颜色distance = np.linalg.norm(avgcolor - self.avgcolors, axis=1) # 使用函数求对应颜色与颜色列表中各个颜色的距离,距离即该图片的索引idx = np.argmin(distance) # 距离最小值颜色最接近,获得对应颜色得组成图片索引outputimage[i*self.blocksize: (i+1)*self.blocksize, j*self.blocksize: (j+1)*self.blocksize, :] = self.sourceimages[idx] # 将组成图片添加到对应位置cv2.imwrite(self.outputpath, outputimage) # 保存到文件if __name__ == '__main__':args = Pic('image/1.jpg', 'image/output1.jpg', 'sourceimages', 6)args.run()
笛卡儿积:
A = [1,2]
B = [3,4]
product(A,B) = [[1,3],[1,4],[2,3],[2,4]]
python做马赛克图相关推荐
- 如何使用python做图_如何使用python做动图
python可以做动图吗 ImageMagick 是一套功能强大.稳定而且开源的工具集和开发包,可以用来读.写和处理超过200种基本格式的图片文件,包括PNG,JPEG,GIF,HEIC,TIFF,D ...
- python做时序图_python如何做时间序列
python做时间序列的方法:首先导入需要的工具包,输入"data.plot()","plt().show()"命令绘制时序图:然后由acf,pacf判断模型参 ...
- 利用python制作马赛克图
目录 爬虫 拼图 先是看到 英雄联盟大拼图的文章,里面用爬虫爬了LOL官网所有英雄的皮肤图片,然后做了一个拼图,他的拼图用其他软件做的,然后我就想到python应该也能做拼图吧,然后就搜到 使用Pyt ...
- python做路径图_初学者福利:python路线图
原标题:初学者福利:python路线图 编程思维简单地分成了两个主要部分,一个是建模,一个是算法优化. 举个例子,比如我们想要做一个程序,这个程序会自动把大象装进冰箱里.那么建模是什么呢?就是我们要知 ...
- python做pca图_【教程】组学研究,用python快速实现PCA分析和绘图
什么是PCA 主成分分析(Principal Component Analysis,PCA)是一种无监督的多元统计分析方法.在蛋白组学和代谢组学研究中能从总体上反应各组样本之间的总体差异和组内样本之间 ...
- 用python做鹦鹉螺图_加速鹦鹉螺Python阅读图像的Exi
我已经编写了一个Nautilus扩展来读取picture的元数据(执行exiftool),但是当我打开包含许多文件的文件夹时,它确实会减慢文件管理器的运行速度并挂起,直到它读取完文件的数据.在 有没有 ...
- lisp xy轴不等比缩放_不就是用Python做个动态图吗?看招
大家好,今天我们要讲的是如何使用Pyecharts制作动态排名变化图 制作这样的一个动态图使用到的是Pyecharts中的TimeLine(时间线轮播图),代码实现起来其实稍有难度,但我希望能通过讲解 ...
- 最近很火的数据动图python_GitHub热榜第一,标星近万:这个用Python做交互式图形的项目火了...
乾明 发自 凹非寺 量子位 报道 | 公众号 QbitAI GitHub上,一份用Python做交互式图形的资源火了. 这一工具名为Bokeh,官方介绍称,它能读取大型数据集或者流数据,以简单快速的方 ...
- python绘制两个离散变量关系图——马赛克图
一个比较好看的图如下: 我们可以较为直观的看到两个离散变量之间的关系,python绘制方法也比较简单 可以使用statsmodels.graphics.mosaicplot.mosaic 文档位置:h ...
最新文章
- HDFS文件系统基本文件命令、编程读写HDFS
- Spring PropertyPlaceholderConfigurer Usage
- 有赞再推视频号流量扶持政策 单商家单月最高可获5万流量奖励
- 手绘平面设计邮票插画素材,复古元素走起
- mybatis 注解 占位符
- gorilla websocket无法跨域_聊聊浏览器同源策略与跨域方案详解
- 使用T4模板动态生成邮件内容并储存到任意位置
- JAVA 汉字转化中文拼音
- oracle 日期型函数转换,oracle中,日期转换函数
- JSP和Servlet传值中文乱码解决
- python表格数据对比_python入门之对比两份excel表格数据
- 八、JUC强大的辅助类
- Android 查询设备信息c/c++常用方法
- 【软考笔记】1. 计算机原理与体系结构
- 精通Apache Flink读书笔记
- 机器学习(一):模型的参数估计方法
- 功放、音响、耳机、播放器试音歌曲,说不定你会喜欢
- 普通人最缺乏的深度思考能力,该如何培养?
- Keras学习| ImageDataGenerator的参数
- iSkysoft PDF Editor软件试用评测
热门文章
- linux系统oracle监听器报错,ORACLE监听器 The listener supports no services 问题解决方法...
- java为什么会有容器_Java--容器认识
- 【新】华为OD机试 - 射击比赛(Python)| 刷完获取OD招聘渠道
- 张近东时代结束,黄明端担任苏宁董事长,确定未来三大战略路径
- 省高企和国家高企有什么不一样吗?
- 浮点加减运算中关于结果规格化的思考
- 23种常见设计模式的新解:泡妞实战篇
- 《好了歌》--跛足道人
- 内存卡不小心格式化了?小江教你恢复!
- 地理信息系统:绪论重点基础知识