用Python实现将多张图片排列成n*m的图像矩阵图
目录
- 引言
- 环境准备
- 代码实现
- 效果演示
- 总结
引言
在图像处理和图像展示的应用中,将多张图片排列成一个图像矩阵图是一个常见的需求。本博客介绍如何使用Python实现将12张图片排列成n*m的图像矩阵图。
环境准备
为了实现这个目标,我们需要安装Pillow库。Pillow是Python中一个强大的图像处理库,它提供了丰富的图像处理功能。
你可以使用以下命令来安装Pillow库:
pip install Pillow
代码实现
下面是Python代码的实现步骤:
- 导入所需的库:
from PIL import Image
- 加载图片:
images = []
for i in range(0, 12): # 加载12张图片,假设图片名分别为0.jpg, 1.jpg, ..., 11.jpg
image_path = f"{i}.jpg"
image = Image.open(image_path)
images.append(image)
- 创建一个空白图像,并计算结果图像的大小:
result_width = images[0].width * m
result_height = images[0].height * n
result_image = Image.new("RGB", (result_width, result_height))
- 将图片拼接到空白图像上:
for i in range(n):
for j in range(m):
image_index = i * m + j
result_image.paste(images[image_index], (j * images[0].width, i * images[0].height))
- 展示和保存图像:
result_image.show()
result_image.save("output.jpg")
效果演示
下面是将12张图片排列成3*4图像矩阵的示例图像:
总结
本博客介绍了如何使用Python和Pillow库将12张图片排列成n*m的图像矩阵图。你可以根据需要修改代码以适应不同的图片数量和排列方式。
———————————————————————————— CV —————————————————————————————
感谢您阅读本篇博客文章!👀📚
如果您觉得这篇文章对您有帮助,不妨给我一个关注点赞👍以示支持!您的支持是我创作的最大动力。💪💙=
如果您对这个领域还有更多的疑问或者想要探讨更深入的话题,欢迎在评论区留下您的想法和问题,我将竭诚为您解答。🤝💬
另外,如果您有任何私密的问题或者希望单独交流的内容,也欢迎通过私信与我联系,我将尽快回复您。📩💫
让我们一起构建一个充满互动和知识分享的技术社区吧!🌟🚀
再次感谢您的阅读和支持!期待与您在下一篇博客中再次相会!✨😊
完整代码文章来源:https://www.toymoban.com/news/detail-620263.html
def arrange():
from PIL import Image
import numpy as np
# 加载12张图片,假设图片名分别为0.jpg, 1.jpg, ..., 11.jpg
images = []
for i in range(0, 12):
image_path = f"/home/you/pic/{i}.jpg"
image = Image.open(image_path)
images.append(image)
# 创建一个空白图像,用于拼接图片
result_width = images[0].width * 4
result_height = images[0].height * 3
result_image = Image.new("RGB", (result_width, result_height))
# 将图片拼接到空白图像上
for i in range(3):
for j in range(4):
image_index = i * 4 + j
result_image.paste(images[image_index], (j * images[0].width, i * images[0].height))
# 展示和保存拼接后的图像
result_image.show()
result_image.save("output1.jpg")
if __name__ == '__main__':
import cv2
import os
# 以下代码是先把多张图片处理成相同尺寸,并按照0~11.jpg命名(假设有12张图片)
# path = r"/home/you/pic" # 存放原图片的文件夹路径
# list = os.listdir(path)
# for index, i in enumerate(list):
# l = r"/home/you/pic/{}".format(i)
# img = cv2.imread(l)
# img = cv2.resize(img, (640, 640)) # 将尺寸处理成640*640
# s = r"/home/you/{}.jpg".format(index) # 处理后的图片名
# cv2.imwrite(s, img)
# 调用排列图片函数
arrange()
以下是用类来实现的完整代码文章来源地址https://www.toymoban.com/news/detail-620263.html
from typing import Union
from pathlib import Path
from PIL import Image
import numpy as np
import os
class Pailie(object):
"""
将多张图片进行矩阵排列
Args:
src_path ([str, bool, Path], optional): 原图片存放的路径.将原图片处理为相同尺寸使用
size ([int, tuple, None], optional): 啊将图片的尺寸设置为size * size
dst_path ([str, Path], must): 准备好的图片存放路径。
Returns: None
"""
def __init__(self, src_path: Union[str, Path, None], size: Union[int, tuple, None], dst_path: Union[str, Path]):
self.src_path = src_path
if self.src_path is not None:
self.src_path = self.src_path if isinstance(self.src_path, Path) else Path(self.src_path)
self.dst_path = dst_path if isinstance(dst_path, Path) else Path(dst_path)
# 将新的dst文件夹作为排列函数的目标文件夹拿到
self.dst_path = self.dst_path if self.dst_path.exists() else self.dst_path.mkdir()
self.size = size
def rephoto(self):
"""
以下代码是先把多张图片处理成相同尺寸,并按照0~11.jpg命名(假设有12张图片),并把其放到目标文件夹中,
如果文件意已经是相同尺寸,可将参数src_path 设置为False关闭此函数
"""
# 将储存参数元组的形式拿到
size_arg = (self.size, self.size) if isinstance(self.size, int) else self.size
# 将所以的目标图片进行尺寸修改
cache = [Image.open(i).resize(size_arg) for i in self.src_path.iterdir()]
# 将所用图片重命名放到dst_path路径中
for index, im in enumerate(cache):
im.save(self.dst_path / Path(str(index)).with_suffix(".png"))
def arrange(self):
"""
将dst_path下面的图片重排成一张矩阵图
"""
facmax, facmin = self.crack(len(os.listdir(self.dst_path)))
# 加载12张图片, 0.jpg, 1.jpg, ..., 11.jpg
cache = [Image.open(i) for i in self.dst_path.iterdir()]
# 创建一个空白图像,用于拼接图片
result_width = cache[0].width * facmax
result_height = cache[0].height * facmin
result_image = Image.new("RGB", (result_width, result_height))
# 将图片拼接到空白图像上
for i in range(facmin):
for j in range(facmax):
image_index = i * facmax + j
result_image.paste(cache[image_index], (j * cache[0].width, i * cache[0].height))
# 展示和保存拼接后的图像
result_image.show()
result_image.save("output.jpg")
@staticmethod
def crack(inter: Union[float, int]) -> (int, int):
"""
将一个数拆分成两个整数相乘,这两个整数要尽可能接近
"""
factor1 = int(np.sqrt(inter))
factor2 = inter / factor1
f = lambda x: True if x != int(x) else False
while f(factor2):
factor1 += 1
factor2 = inter / factor1
facmax = max(factor1, int(factor2))
facmin = min(factor1, int(factor2))
return facmax, facmin
def __call__(self):
if self.src_path is not None:
self.rephoto()
self.arrange()
if __name__ == '__main__':
# 如果你的图片不是相同的尺寸,传入src_path和size参数实现图片尺寸的额统一化,如果你的图片尺寸已经相同,只要将这两个参数设置为None即可
dev = Pailie(src_path=None, dst_path=r"C:\Users\yourname\Desktop\yourfolder", size=None)
dev()
到了这里,关于python将多张图片拼成一张矩阵图,合成一张大图的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!