Python如何实现多张图片合成一张马赛克图片
发表于:2025-02-23 作者:千家信息网编辑
千家信息网最后更新 2025年02月23日,这篇文章将为大家详细讲解有关Python如何实现多张图片合成一张马赛克图片,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。图片素材4K高清原图开发环境Python 3
千家信息网最后更新 2025年02月23日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安全错误
数据库的锁怎样保障安全
互联网服务器
提高网络安全防范意识心得体会
软件开发团队缩写
数字五笔软件开发
上海旅游网络技术有限公司
南京工业职业技术大学数据库
金蝶数据库服务费
网络软件开发公司官网
温州银行软件开发面试
学软件开发初中毕业可以吗
西安服务器租用
深圳工作十年软件开发工资
怀化市必强软件开发有限公司
无线网络技术第五章
软件开发工具应用现状
服务器黑屏怎么解决
幻想乡手游服务器
计算机网络技术专业零基础
藁城区标准软件开发服务咨询报价
怎么取消服务器端口
微商城分销软件开发
网络安全三个一活动
osi网络技术入门
看门狗2一直提示连接不到服务器
乡镇妇联网络安全讲座
周鸿祎网络安全人才
软件开发工具试题
触犯网络安全怎么制罪
资源存储服务器推荐什么系统
软件开发合同需要注意什么