怎么把多张图片合成一张,怎么把图片组合起来成为一个 。小编来告诉你更多相关信息 。
目录 前言 开发环境 实现代码 先导入所需模块 读取图片文件
读取所有源图片并计算对应颜色的平均值
合法图像列表 平均颜色列表 遍历 主函数 模块调用执行 完整效果
前言说是女儿从出生到现在,所有的照片,大概有上百张,所以想使用这些照片合成一张,当做生日礼物
那我们今天就用上次爬表情包的图片来做一次马赛克图片,2万张合成一张,想想就很激动
欢迎加入,一起讨论学习
文章插图
文章插图
图片素材
文章插图
文章插图
4K高清原图
文章插图
文章插图
开发环境Python 3.6
Pycharm
实现代码先导入所需模块import cv2
import glob
import argparse
import numpy as np
读取图片文件10
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 = []
遍历 每遍历一次,进度条走一次
10
11
12
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)
主函数10
11
12
13
14
15
def main(args):
targetimage = cv2.imread(args.targetpath)
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__\’:
main(parseArgs())
完整效果
文章插图
文章插图
文章插图
文章插图
文章插图
文章插图
文章插图
文章插图
到此这篇关于Python实现多张图片合成一张马赛克图片的文章就介绍到这了
推荐阅读
- 创造与魔法魔法饲料怎么做 创造与魔法饲料大全
- 电脑上怎么注册QQ号 电脑如何注册qq账号呢
- 每天作业写不完怎么办 孩子老是写不完作业怎么办
- 黑豆怎么吃好吃又有营养 黑豆怎么吃最有营养
- 电脑无法启动怎么修复 电脑开不了机的原因和解决办法
- 苹果手机耗电快怎么解决 苹果手机耗电严重处理方法
- word怎么删掉多余的空白页 删除word空白页的4种简单方法
- 苹果手机老是闪退怎么回事 解决苹果手机闪退的方法
- 图片怎么转换成pdf格式 两个将图片转换成PDF文件的好方法
- 借呗怎么提升额度到10万 借呗怎么申请额度提高