Python实现多张图片合成一张马赛克图片

article/2025/11/9 22:21:24

前言

最近有网友私信我,问如何把多张图片合成一张马赛克图片的样子

说是女儿从出生到现在,所有的照片,大概有上百张,所以想使用这些照片合成一张,当做生日礼物

那我们今天就用上次爬表情包的图片来做一次马赛克图片,2万张合成一张,想想就很激动

image.png

图片素材

image.png

4K高清原图

image.png

开发环境

Python 3.6

Pycharm

实现代码

先导入所需模块

|

`import` `cv2``import` `glob``import` `argparse``import` `numpy as np``from` `tqdm` `import` `tqdm` `# 进度条``from` `itertools` `import` `product` `# 迭代器`

|

读取图片文件

|

`def` `parsArgs():``parser` `=` `argparse.ArgumentParser(``'拼接马赛克图片'``)``parser.add_argument(``'--targetpath'``,` `type``=``str``, default``=``'examples/3.jpg'``,` `help``=``'目标图像路径'``)``parser.add_argument(``'--outputpath'``,` `type``=``str``, default``=``'output.jpg'``,` `help``=``'输出图像的路径'``)``parser.add_argument(``'--sourcepath'``,` `type``=``str``, default``=``'sourceimages'``,` `help``=``'用来拼接图像的所有源图像文件路径'``)``parser.add_argument(``'--blocksize'``,` `type``=``int``, default``=``15``,` `help``=``'马赛克快的大小'``)``args` `=` `parser.parse_args()``return` `args`

|

读取所有源图片并计算对应颜色平均值

|

`def` `readSourceImages(sourcepath,blocksize):``print``(``'开始读取图像'``)`

合法图像列表

设置一个列表,存放符合要求的颜色图像

|

`sourceimages` `=` `[]`

|

平均颜色列表

|

|

`avgcolors` `=` `[]`

|

遍历

每遍历一次,进度条走一次

|

|

`for` `path` `in` `tqdm(glob.glob(``"{}/*.jpg"``.``format``(sourcepath))):``image` `=` `cv2.imread(path, cv2.IMREAD_COLOR)``if` `image.shape[``-``1``] !``=` `3``:``continue``# 缩放尺寸``image` `=` `cv2.resize(image, (blocksize, blocksize))``# 图像颜色平均值``avgcolor` `=` `np.``sum``(np.``sum``(image, axis``=``0``), axis``=``0``)` `/` `(blocksize` `*` `blocksize)``sourceimages.append(image)``avgcolors.append(avgcolor)``print``(``'结束读取'``)``return` `sourceimages,np.array(avgcolors)`

|

主函数

|

`def` `main(args):``targetimage` `=` `cv2.imread(args.targetpath)``outputimage` `=` `np.zeros(targetimage.shape,np.uint8)` `# int8 int16 int32 int64``sourceimages,avgcolors` `=` `readSourceImages(args.sourcepath,args.blocksize)``print``(``'开始制作'``)``for` `i, j` `in` `tqdm(product(``range``(``int``(targetimage.shape[``1``]``/``args.blocksize)),` `range``(``int``(targetimage.shape[``0``]``/``args.blocksize)))):``block` `=` `targetimage[j` `*` `args.blocksize: (j` `+` `1``)` `*` `args.blocksize, i` `*` `args.blocksize: (i` `+` `1``)` `*` `args.blocksize,:]``avgcolor` `=` `np.``sum``(np.``sum``(block, axis``=``0``), axis``=``0``)` `/` `(args.blocksize` `*` `args.blocksize)``distances` `=` `np.linalg.norm(avgcolor` `-` `avgcolors, axis``=``1``)``idx` `=` `np.argmin(distances)``outputimage[j` `*` `args.blocksize: (j` `+` `1``)` `*` `args.blocksize, i` `*` `args.blocksize: (i` `+` `1``)` `*` `args.blocksize, :]` `=` `\``sourceimages[idx]``cv2.imwrite(args.outputpath, outputimage)``cv2.imshow(``'result'``, outputimage)``print``(``'制作完成'``)`

|

模块调用执行

 | `if` `__name__` `=``=` `'__main__'``:``# run``main(parseArgs())`

|

完整效果

image.png

image.png

image.png

image.png

到此这篇关于Python实现多张图片合成一张马赛克图片的文章就介绍到这了


http://chatgpt.dhexx.cn/article/qJxNDyKG.shtml

相关文章

两张图片怎样合成一张左右拼图?

相信很多小伙伴的手机和电脑上都储存了一定数量的图片,在使用这些图片的时候,因为一些需要有时候我们要将图片拼在一起使用,数量多的时候我们可以拼成长竖图或者长横图,当然也可以借助拼接软件里面的模板进行自由选择拼接。但是如…

怎么将三张图片合成一张图片?

怎么将三张图片合成一张图片?遇到这个问题,我们其实有很多方法来处理。我们首当其冲想到的是其中最常见的,可以使用我们手机的APP来处理,比如某秀秀等。但是此方法比较适合于尺寸比较小的图片进行合并,如果图片比较大的…

如何拼接多张图片,多张图片拼接成一张

如何拼接多张图片,多张图片拼接成一张?小编作为一名互联网行业的从业者,每天都需要使用到很多的图片,那么自然也需要对图片做各种不同的处理,例如格式转换、修改尺寸等。除了这些之外我还经常需要对图片进行拼接&#…

如何将两张图片上下合成一张?

如何将两张图片上下合成一张?不知道大家有没有遇到过这样的情况,工作中需要将两张图片上传到某个网站上,但是网站只能允许上传一张图片,相信很多小伙伴都有过这样的经历吧。这个时候大家会怎么办呢?有什么方法可以解决…

PhotoShop简单案例(3)——利用ps实现多图合成(多张小图片拼成一张大图片)

目录 一、项目介绍二、预处理2.1 图片裁剪2.2 多图裁剪2.3.1 新建动作2.3.2 图片裁剪2.3.3 批量裁剪 三、基本流程3.1 图像裁剪3.2 联系表3.3 图案填充3.4 其他 四、效果演示 一、项目介绍 本文将介绍利用ps实现多图合成(多张小图片拼成一张大图片)&…

如何把几张图片整合到一张图片?

如何把几张图片整合到一张图片?整合图片,也就是把几张图片拼接到一起,关于这样的方法,我想各位小伙伴或多或少都有一些自己的整合方法,鉴于每一种方法的转换效果和效率不同,可能有些小伙伴不再满足自己所使…

如何将多张图片拼成一张图?

如何将多张图片拼成一张图?作为一名幼儿园老师,为满足家长内心需要,我们每天都会给宝贝们拍多张不同的照片然后传给家长。但是一张一张的传,不仅耗费时间而且很慢,所以我通常都是把多张照片拼接在一起,然后…

如何将两张图片合成一张?

如何将两张图片合成一张?由于工作的原因,我们经常需要在电脑上将图片进行合成,例如将两张图片合并拼接成一张,对于某些小伙伴老说这并不是很难的一件事情,使用ps软件就能将两张图片进行合并,小编之前也是用…

如何把几张图片合并成一张图片?

在我们的日常生活和工作中难免会有把几张照片合成一张图片的需要,那么今天你来到这里就没错了,这里有将图片合成一张图片的简单操作方法,不仅可以合并图片,还可以在软件内直接实现图片格式的转换,压缩,改尺…

最详细的解释——如何实现多张图片拼接为一张图(一)

日常生活中,我们经常需要将多张图片合成为一张图片,但是却又找不到好的方法,直接将多张图片拖拽到一起不仅耗时耗力,而且效率低,效果差。OpenCV 给我们提供了很好的拼接工具,下面我们以两张图片的拼接为例介…

照片怎么拼图合成一张?这几个方法建议收藏

前段时间,我和朋友出去旅游时,拍了许多照片。当我们回到家中时,决定将这些照片分享到朋友圈上,来纪念这一段旅游经历。但是,由于想要分享的图片很多,而朋友圈只能发布9张图片,因此,我…

怎样能把两张照片拼成一张图片,1分钟搞定

怎样能把两张照片拼成一张图片?图片拼合的应用场景是很多的。比如将几张相册中的照片拼成一张合影、将多个地图截图拼合在一起形成一个更大的区域地图、将多个漫画图像合并成一本漫画册等。这项技术可以方便地将多张图片整合为一张,节省时间和精力。 因此…

windows启动tomcat

启动Tomcat 方法有三种: 方法一:在tomcat解压路径下的bin文件夹内双击打开"tomcat9w.exe",在打开的软件界面点击“Start”即可。 点击start 方法二:右键点击桌面上的“此电脑”—>“管理”—>“服务和应用程序…

tomcat 安装与启动

tomcat 安装与启动 tomcat 下载:Apache Tomcat - Apache Tomcat 10 Software Downloads ******************** tomcat 安装包说明 zip:基础安装包,不包含windows服务相关的批处理脚本、以及windows下的APR本地库 tar.gz:与zip报内…

怎么测试Tomcat是否安装配置成功

我们打开Tomcat的安装路径,如下: 我们双击“bin”文件夹,如下: 我们再双击上图中标出的start.dat文件,如下: (注意:点击bin下面的startup.bat文件手动启动,可能老是出现窗…

tomcat启动很慢的解决方式

很多人肯定都用tomcat容器来启动项目,但可能有些时候启动时间特别长,甚至达到了几万毫秒至几十万毫秒,除去开发idea的问题和代码架构本身问题外,可能就是tomcat容器的优化问题,下面提供一种优化启动的方式。 1.首先我…

启动tomcat遇到的问题

1.Error running ‘Tomcat8‘: The selected directory is not a TomEE home 问题 使用IDEA创建spring项目时,启动tomcat老是报错: Error running Tomcat8: The selected directory is not a TomEE home 原因 配置本地的tomcat应该选择Tomcat Server&…

启动Tomcat时常见的报错

启动Tomcat时常见的报错 问题1:启动Tomcat时闪退 问题原因:JDK环境变量配置有误 解决方案: 将鼠标光标移至 此电脑 右击鼠标选择属性一栏,进入系统界面在左侧菜单栏选择高级系统设置,并点击环境变量 进入环境变量之…

Tomcat配置及启动

在高级系统设置里面: 输入变量名CATALINA_BASE再输入安装路径, 输入变量名CATALINA_HOME和安装路径, 在变量值Path中添加%CATALINA_HOME%\bin。 在bin目录里面点击startup启动; 如果启动后如下图; 但是不能访问127…

Java启动Tomcat

文章目录 目标:实现: 一、前期准备 1、加入依赖2、定义Servlet类3、定义Servlet类4、启动Tomcat并测试 总结 流程图重点及易错点 1、服务器阻塞等待请求 目标: 学习使用java代码启动Tomcat。 实现: 一、前期准备 实现自定…