Python如何实现多张图片合成一张马赛克图片
发表于:2025-01-19 作者:千家信息网编辑
千家信息网最后更新 2025年01月19日,这篇文章将为大家详细讲解有关Python如何实现多张图片合成一张马赛克图片,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。图片素材4K高清原图开发环境Python 3
千家信息网最后更新 2025年01月19日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安全错误
数据库的锁怎样保障安全
消费软件安装数据库
传奇3 服务器满员
客户不让知道数据库密码
混合模型怎么录入数据库
数据库创建函数语句
一个商店的数据库有什么
我的世界创服务器网站
服务器怎么开任务管理器
两路服务器
xx网络安全管理
在旅行网络安全监督
数据库模式分解图解
扶绥天气预报软件开发
广东尚睿网络技术有限公司排名
sci数据库编写教程
中职计算机网络技术ppt
辽宁子墨网络技术有限公司招聘
大专软件开发方向找什么工作
汕头天气预报软件开发
网络安全责任落实自查报告
军 人如何过好网络安全关
软件开发的所得税减免
操作查询会改变数据库数据吗
网络安全问题普遍出现的时间
奥金斧服务器免费
网络安全 谁管理谁负责
境内外的网络安全
c# 2.0操作数据库类
青浦区网络安全审计系统咨询价格
试述数据库模型的三个要素