Python OpenCV将n×n的小图拼接成m×m的大图

Python OpenCV将n×n的小图拼接成m×m的大图

  • 前言
  • 前提条件
  • 相关介绍
  • 实验环境
  • n × \times ×n的小图拼接成m × \times ×m的大图
    • 代码实现

Python OpenCV将n×n的小图拼接成m×m的大图_第1张图片

前言

  • 由于本人水平有限,难免出现错漏,敬请批评改正。
  • 更多精彩内容,可点击进入Python日常小操作专栏、OpenCV-Python小应用专栏、YOLO系列专栏、自然语言处理专栏或我的个人主页查看
  • 基于DETR的人脸伪装检测
  • YOLOv7训练自己的数据集(口罩检测)
  • YOLOv8训练自己的数据集(足球检测)
  • YOLOv5:TensorRT加速YOLOv5模型推理
  • YOLOv5:IoU、GIoU、DIoU、CIoU、EIoU
  • 玩转Jetson Nano(五):TensorRT加速YOLOv5目标检测
  • YOLOv5:添加SE、CBAM、CoordAtt、ECA注意力机制
  • YOLOv5:yolov5s.yaml配置文件解读、增加小目标检测层
  • Python将COCO格式实例分割数据集转换为YOLO格式实例分割数据集
  • YOLOv5:使用7.0版本训练自己的实例分割模型(车辆、行人、路标、车道线等实例分割)
  • 使用Kaggle GPU资源免费体验Stable Diffusion开源项目

前提条件

  • 熟悉Python

相关介绍

  • Python是一种跨平台的计算机程序设计语言。是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越多被用于独立的、大型项目的开发。

实验环境

  • Python 3.x (面向对象的高级语言)

n × \times ×n的小图拼接成m × \times ×m的大图

Python OpenCV将n×n的小图拼接成m×m的大图_第2张图片
Python OpenCV将n×n的小图拼接成m×m的大图_第3张图片
Python OpenCV将n×n的小图拼接成m×m的大图_第4张图片
Python OpenCV将n×n的小图拼接成m×m的大图_第5张图片
Python OpenCV将n×n的小图拼接成m×m的大图_第6张图片
Python OpenCV将n×n的小图拼接成m×m的大图_第7张图片Python OpenCV将n×n的小图拼接成m×m的大图_第8张图片
Python OpenCV将n×n的小图拼接成m×m的大图_第9张图片

Python OpenCV将n×n的小图拼接成m×m的大图_第10张图片

代码实现

import os
import cv2
import numpy as np


def divide_chunks(l, n): # 将列表l分成n个子列表(块)
    # looping till length l
    for i in range(0, len(l), n): 
        yield l[i:i + n]


if __name__=="__main__":
    # 定义小图和大图的尺寸
    small_image_size = 512
    large_image_size = 1536
    # 3 * 3 * 512 * 512 = 1536 * 1536 
    row_num, col_num = large_image_size // small_image_size, large_image_size // small_image_size

    # 定义小图文件名列表
    img_dir = 'imgs/'
    filename_list = os.listdir(img_dir)
    # print(filename_list)
    img_name_list = [img_name for img_name in filename_list if img_name.endswith('.jpg')]
    # print(img_name_list)
    img_lists = []

    # 分块
    n = row_num * col_num
    img_lists = list(divide_chunks(img_name_list, n))

    print(img_lists)

    for img_list_num, img_list in  enumerate(img_lists):
        # 创建一个空白的大图
        result = np.zeros((large_image_size, large_image_size, 3), dtype=np.uint8)
        # 使用 for 循环将小图拼接到大图上
        for i, img_name in enumerate(img_list):
            # 读取小图
            img_path = img_dir  + img_name
            small_image = cv2.imread(img_path)
            small_image = cv2.resize(small_image,(small_image_size,small_image_size))

            # 计算小图在大图中的位置
            row = (i // row_num) * small_image_size
            col = (i % col_num) * small_image_size
            # print((row,col)) # h,w

            # 将小图拼接到大图上
            result[row:row+small_image_size, col:col+small_image_size] = small_image

        # 保存大图
        cv2.imwrite('result_{}.jpg'.format(img_list_num), result)

Python OpenCV将n×n的小图拼接成m×m的大图_第11张图片

  • 由于本人水平有限,难免出现错漏,敬请批评改正。
  • 更多精彩内容,可点击进入Python日常小操作专栏、OpenCV-Python小应用专栏、YOLO系列专栏、自然语言处理专栏或我的个人主页查看
  • 基于DETR的人脸伪装检测
  • YOLOv7训练自己的数据集(口罩检测)
  • YOLOv8训练自己的数据集(足球检测)
  • YOLOv5:TensorRT加速YOLOv5模型推理
  • YOLOv5:IoU、GIoU、DIoU、CIoU、EIoU
  • 玩转Jetson Nano(五):TensorRT加速YOLOv5目标检测
  • YOLOv5:添加SE、CBAM、CoordAtt、ECA注意力机制
  • YOLOv5:yolov5s.yaml配置文件解读、增加小目标检测层
  • Python将COCO格式实例分割数据集转换为YOLO格式实例分割数据集
  • YOLOv5:使用7.0版本训练自己的实例分割模型(车辆、行人、路标、车道线等实例分割)
  • 使用Kaggle GPU资源免费体验Stable Diffusion开源项目

你可能感兴趣的:(Python日常小操作,python,opencv,开发语言)