目录
前言开发环境实现代码首先获取必需模块图片文件读取所有源图片并计算相应颜色的平均值合法图像列表平均颜色列表主函数模块调用全部效果
前言
最近,一位网民购买了将多张照片合成马赛克照片的方法
女儿出生到现在,所有的照片,大约有几百张,所以我想合成这些照片,用作生日礼物。
那么,今天用上次上传表情包的照片制作一次马赛克照片,合成2万张,就很兴奋了。、、
私人01可以获得大量的python学习资源
欢迎加入。请一起讨论学习
照片材质
4K高清原版
开发环境
python 3.6
Pycharm
实现代码
首先获取所需的模块
1
2
3
4
5
6
Import cv2
Import glob
Import argparse
Import numpy as NP
From tqdm import tqdm #进度列
From itertools import product #迭代器
读取图片文件
1
2
3
4
5
6
7
8
9
10
Def parsArgs():
Parser=arg(“马赛克图片”)
('-targetpath ',type=str,default=' example,help='大象图像路径')
('-outputpath ',type=str,default=' ou,help='输出图像的路径')
('-sourcepath ',type=str,default=' sourceimages ',help='用于连接图像的所有源图像文件路径')
('-block size ',type=int,default=15,help='马赛克快速大小')
Args=()
Return args
读取所有源图片并计算其颜色平均值
1
2
Def readsourceimages (sourcepath,blocksize) :
Print(“开始读取图像”)
合法形象列表
设置一个列表来存储符合您要求的颜色图像
le>1
sourceimages = []
平均颜色列表
1 | avgcolors = [] |
遍历
每遍历一次,进度条走一次
1 2 3 4 5 6 7 8 9 10 11 12 | for path in tqdm("{}/*.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(image, axis=0), axis=0) / (blocksize * blocksize) sourceimages.append(image) avgcolors.append(avgcolor) print('结束读取') return sourceimages,np.array(avgcolors) |
主函数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | def main(args): targetimage = cv2.imread) outputimage = np.zeros(targetimage.shape,np.uint8) # int8 int16 int32 int64 sourceimages,avgcolors = readSourceImage) print('开始制作') for i, j in tqdm(product(range(int(targetimage.shape[1])), range(int(targetimage.shape[0])))): block = targetimage[j * args.blocksize: (j + 1) * args.blocksize, i * args.blocksize: (i + 1) * args.blocksize,:] avgcolor = np.sum(block, axis=0), axis=0) / * 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, outputimage) cv2.imshow('result', outputimage) print('制作完成') |
模块调用执行
1 2 3 | if __name__ == '__main__': # run main(parseArgs()) |
完整效果
到此这篇关于Python实现多张图片合成一张马赛克图片的文章就介绍到这了
1.《表情包怎么马赛克?总结很全面速看!Python实现多张图片合成一张马赛克图片》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。
2.《表情包怎么马赛克?总结很全面速看!Python实现多张图片合成一张马赛克图片》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。
3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/gl/3335211.html