Python如何实现多张图片合成一张马赛克图片
发表于:2024-10-22 作者:千家信息网编辑
千家信息网最后更新 2024年10月22日,这篇文章将为大家详细讲解有关Python如何实现多张图片合成一张马赛克图片,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。图片素材4K高清原图开发环境Python 3
千家信息网最后更新 2024年10月22日Python如何实现多张图片合成一张马赛克图片
这篇文章将为大家详细讲解有关Python如何实现多张图片合成一张马赛克图片,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
图片素材
4K高清原图
开发环境
Python 3.6
Pycharm
实现代码
先导入所需模块
import cv2import globimport argparseimport numpy as npfrom 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())
完整效果
关于"Python如何实现多张图片合成一张马赛克图片"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
图片
图像
马赛克
马赛
颜色
篇文章
路径
多张
平均值
文件
更多
模块
进度
制作
不错
合法
实用
代码
内容
函数
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
专科计算机网络技术枯燥吗
火龙草我的世界服务器
宁波建设智慧消防软件开发
图书馆服务器图片
数据库索引的查找过程
外包网络技术团队
主流关系型数据库比较
浙江计算机网络技术专业学校
最安全可靠的云服务器品牌
数据库安全问题难点
lol服务器多大
铁道警察学院网络安全执法
软件开发共有几个阶段
服务器HPDL388G7
榆林市网络安全协会是什么
上海图书馆 家谱数据库
远程无法访问服务器管理端口
ps4首次登陆无法连接服务器
excel数据库是什么模型
域服务器历史背景
城厢雅绅网络技术是什么
数据库0点自动切表
派出所网络安全小组分工
网络安全周工作论坛致辞
服务器等级和玩家等级有关系吗
无锡正规软件开发专业服务
杨浦区标准网络技术服务欢迎咨询
美国防部网络安全战略报告
宁德应用软件开发
杭州互联网软件开发定制