Python实现多张图片合成一张马赛克图片_第1页
Python实现多张图片合成一张马赛克图片_第2页
Python实现多张图片合成一张马赛克图片_第3页
Python实现多张图片合成一张马赛克图片_第4页
Python实现多张图片合成一张马赛克图片_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第Python实现多张图片合成一张马赛克图片目录前言开发环境实现代码先导入所需模块读取图片文件读取所有源图片并计算对应颜色平均值合法图像列表平均颜色列表遍历主函数模块调用执行完整效果

前言

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

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

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

图片素材

4K高清原图

开发环境

Python3.6

Pycharm

实现代码

先导入所需模块

importcv2

importglob

importargparse

importnumpyasnp

fromtqdmimporttqdm#进度条

fromitertoolsimportproduct#迭代器

读取图片文件

defparsArgs():

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()

returnargs

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

defreadSourceImages(sourcepath,blocksize):

print('开始读取图像')

合法图像列表

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

sourceimages=[]

平均颜色列表

avgcolors=[]

遍历

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

forpathintqdm(glob.glob("{}/*.jpg".format(sourcepath))):

image=cv2.imread(path,cv2.IMREAD_COLOR)

ifimage.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('结束读取')

returnsourceimages,np.array(avgcolors)

主函数

defmain(args):

targetimage=cv2.imread(args.targetpath)

outputimage=np.zeros(targetimage.shape,np.uint8)#int8int16int32int64

sourceimages,avgcolors=readSourceImages(args.sourcepath,args.blocksize)

print('开始制作')

fori,jintqdm(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.im

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论