怎么把多张图片合成一张(怎么把图片组合起来成为一个)
2023-01-12 canyinms.com 【 字体:大 中 小 】
怎么把多张图片合成一张,怎么把图片组合起来成为一个。小编来告诉你更多相关信息。
目录
前言 开发环境 实现代码 先导入所需模块 读取图片文件
读取所有源图片并计算对应颜色的平均值
合法图像列表 平均颜色列表 遍历 主函数 模块调用执行 完整效果
前言
说是女儿从出生到现在,所有的照片,大概有上百张,所以想使用这些照片合成一张,当做生日礼物
那我们今天就用上次爬表情包的图片来做一次马赛克图片,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实现多张图片合成一张马赛克图片的文章就介绍到这了
猜你喜欢
安徽省安庆市2023-03-23 16:14发布大风蓝色预警
江西省宜春市2023-03-23 17:00发布雷电黄色预警
江西省九江市2023-03-23 17:00发布雷电黄色预警
福建省漳州市2023-03-23 16:30发布雷电橙色预警
江西省宜春市2023-03-23 17:15发布雷电黄色预警
江西省赣州市2023-03-23 17:58发布雷电黄色预警
江西省萍乡市2023-03-23 16:12发布雷电黄色预警
湖南省长沙市2023-03-23 18:05发布冰雹橙色预警
河南省南阳市2023-03-23 17:05发布大风蓝色预警
福建省泉州市2023-03-23 16:17发布雷电黄色预警
如何自制蛋挞
肉火烧面怎么和面
奶茶几分糖好喝
过桥米线是哪里的?
面霜和乳液的区别
怎么摘隐形眼镜
粉饼和散粉的区别
冷烫和热烫的区别
高品质香水如何鉴别?用三步就可以解决
如何去除黑眼圈