python将多张图片拼成一张矩阵图,合成一张大图

这篇具有很好参考价值的文章主要介绍了python将多张图片拼成一张矩阵图,合成一张大图。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

用Python实现将多张图片排列成n*m的图像矩阵图


目录

  • 引言
  • 环境准备
  • 代码实现
  • 效果演示
  • 总结

引言

在图像处理和图像展示的应用中,将多张图片排列成一个图像矩阵图是一个常见的需求。本博客介绍如何使用Python实现将12张图片排列成n*m的图像矩阵图。

环境准备

为了实现这个目标,我们需要安装Pillow库。Pillow是Python中一个强大的图像处理库,它提供了丰富的图像处理功能。

你可以使用以下命令来安装Pillow库:

pip install Pillow

代码实现

下面是Python代码的实现步骤:

  1. 导入所需的库:
from PIL import Image
  1. 加载图片:
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)
  1. 创建一个空白图像,并计算结果图像的大小:
result_width = images[0].width * m
result_height = images[0].height * n
result_image = Image.new("RGB", (result_width, result_height))
  1. 将图片拼接到空白图像上:
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))
  1. 展示和保存图像:
result_image.show()
result_image.save("output.jpg")

效果演示

下面是将12张图片排列成3*4图像矩阵的示例图像:

python将多张图片拼成一张矩阵图,合成一张大图,矩阵,人工智能,pillow

总结

本博客介绍了如何使用Python和Pillow库将12张图片排列成n*m的图像矩阵图。你可以根据需要修改代码以适应不同的图片数量和排列方式。
———————————————————————————— CV —————————————————————————————
感谢您阅读本篇博客文章!👀📚
如果您觉得这篇文章对您有帮助,不妨给我一个关注点赞👍以示支持!您的支持是我创作的最大动力。💪💙=
如果您对这个领域还有更多的疑问或者想要探讨更深入的话题,欢迎在评论区留下您的想法和问题,我将竭诚为您解答。🤝💬
另外,如果您有任何私密的问题或者希望单独交流的内容,也欢迎通过私信与我联系,我将尽快回复您。📩💫
让我们一起构建一个充满互动和知识分享的技术社区吧!🌟🚀
再次感谢您的阅读和支持!期待与您在下一篇博客中再次相会!✨😊

完整代码


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模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MidJourney教程03--BLEND 两张图片合成一张图片

    MidJourney教程02--BLEND 两张图片合成一张图片 首先输入   然后会让你选择两张图片进行处理!  那么,现在我们把比卡丘,和路飞融合在一起啦!  接下来看出来效果会是怎么样子呢? 那么,我们就得到了一个路飞比卡丘! 其实还有很多种方法可以使用! 例如场景与产品的

    2024年02月15日
    浏览(41)
  • 微信小程序原生将两张图片合成一张并保存至手机中

    我是一名刚毕业工作俩月的实习生,技术很菜,如果文章有写的地方,在评论区写出来,让像我一样的小白少走点弯路。. 需要将图片保存至手机, 但是微信小程序官方文档提供的保存至手机api参数是一张图片,而我这是两张图片,一张背景图,一张接口返回的二维码,所以

    2024年02月09日
    浏览(40)
  • python-将矩阵转化成一列

    在进行实际的案例开发过程中,我们经常用到矩阵、数组,而对于这两者学习变得至关重要。在学习矩阵及相关数组的操作过程中,不像matlab那么方便直接操作就可以了,而是需要进行导库才可以进行操作,python主要的学习数组和矩阵的库有 numpy ,numpy中的矩阵库为 numpy.ma

    2024年02月16日
    浏览(39)
  • 对比多张图片相似度(PYTHON)

    可以使用图像处理软件或者编程语言进行相似度对比。常用的指标有:      1. 均方误差(MSE): 计算每个像素的差异,再求平均值。公式:MSE = 1/nΣ(i=1,n)(I1(i)-I2(i))^2,其中I1和I2是两张图片对应像素的灰度值,n是像素数量。MSE越小,表示图片越相似。      2. 结构相似度指

    2024年02月12日
    浏览(41)
  • python使用ffmpeg合并多张图片成视频

    注意: 需要在本地有ffmpeg,并且配置环境变量 下载链接如下:https://download.csdn.net/download/qq_30273575/87898080 # FFmpeg 将多张图片合成视频 # 可以使用 FFmpeg 库来将多张图片合成视频,下面是一个简单的示例: # 在代码中,需要提供存储图片的文件夹路径 images_path 和最终生成的视频

    2024年02月11日
    浏览(46)
  • [python]将多张图片合并为单个pdf文件

    最近有个个人需求是要把多个图片文件合并为一个PDF文件,这样方便用PDF阅读器连续看,避免界面点一下,只会图片放大。( 比如看漫画 ) 主要思路是先把单张图片转换成单个PDF文件,然后把PDF文件进行合并。原先是用WPS的转换工具做的,但WPS每次只能批量转换30张,如果

    2024年03月09日
    浏览(99)
  • java 如何实现多张PDF合并为一张PDF

    import org.apache.pdfbox.multipdf.PDFMergerUtility; import java.io.IOException; public class PDFMergerExample {     public static void main(String[] args) {         // 定义要合并的PDF文件路径         String[] filesToMerge = {\\\"file1.pdf\\\", \\\"file2.pdf\\\", \\\"file3.pdf\\\"};         // 创建PDF合并工具实例         PDFMergerUtility mer

    2024年02月10日
    浏览(58)
  • python脚本——批量将word文件转换成多张图片

    前提:有时候需要快速查看word文档的内容是否自己需要的,或者就是单纯需要将word文档转换成一张张图片。 思路:word文档直接生成图片比较蛮烦,可能会引起格式变化,就先将word文档转换成PDF,然后将PDF文档转换成图片。 语言:python 3 用法:点击运行后,弹出窗口选择文件

    2024年02月11日
    浏览(48)
  • Unity 如何通过2D Sprite切割一张图为多张

    1、理解 在一些2D游戏开发中,我们常常使用2D Sprite把一张大图切割成多个小图使用。 这样做有不少好处,首先,通过精准使用小图,能够一定程度上节省内存,提高渲染性能。 其次把同类的小图做成一张大图在切割使用会更方便我们进行对资源的管理。 再者,在2D游戏中通

    2024年04月26日
    浏览(46)
  • 深入解析,python合并多张图片成视频,可用于批量制作短视频

    随着短视频的兴起,越来越多的人开始用各种形式进行视频制作,本篇博客从程序员的角度为大家解析一下如何通过 Python 合并多个图片为一个视频 除了使用 OpenCV 合并多张图片成视频外,还可以使用其他工具和库,例如: moviepy : 这是一个基于 Python 的视频编辑库,可以帮助

    2024年01月20日
    浏览(62)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包