欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 文化 > 使用 OpenCV 组合和缩放多张图像

使用 OpenCV 组合和缩放多张图像

2024/10/24 11:17:07 来源:https://blog.csdn.net/weixin_43269994/article/details/141604288  浏览:    关键词:使用 OpenCV 组合和缩放多张图像

在图像处理领域,我们经常需要将多张小图像组合成一张大图。例如,将多张图像按一定布局排列在一起,或者创建一个缩略图画廊。在这篇博客中,我将向你展示如何使用 Python 的 OpenCV 库来完成这一任务。

代码

下面是一段完整的 Python 代码,它读取一个目录中的多张图像,将它们裁剪、缩放,并按照 4x4 的网格排列到一张 1280x1280 的大图中,最后将这些大图保存到指定的目录中。

import cv2
import numpy as np
import os# 假设每张小图缩放后的尺寸
small_img_w, small_img_h = 1280 // 4, 1280 // 4  # 4x4 网格,每行 4 张,每列 4 张# 创建大图的尺寸
final_img_w, final_img_h = 1280, 1280  # 1280x1280 大图# 读取所有小图
source = "C:\\Users\\linds\\Desktop\\fsdownload\\recycle_res\\plot_info\\2024_8_27"
save_res_path = "res_stack"
if not os.path.exists(save_res_path):os.makedirs(save_res_path)
img_path_list = [os.path.join(source, img_sub) for img_sub in os.listdir(source)]# 计算总图片数并分组
num_imgs = len(img_path_list)
groups = [img_path_list[i:i + 16] for i in range(0, num_imgs, 16)]  # 4x4 网格,一张大图容纳 16 张小图# 逐组处理图片
for group_index, group in enumerate(groups):final_image = np.zeros((final_img_h, final_img_w, 3), dtype=np.uint8)  # 清空大图for idx, img_path in enumerate(group):print(img_path)img = cv2.imread(img_path)# 去掉顶部500像素# img_cropped = img[500:, :, :]img_cropped = img# 计算缩放比例并缩放h, w = img_cropped.shape[:2]scale = min(small_img_w / w, small_img_h / h)resized_img = cv2.resize(img_cropped, (int(w * scale), int(h * scale)))# 放置在大图中的位置i, j = divmod(idx, 4)  # 使用 4x4 网格y_offset = i * small_img_hx_offset = j * small_img_w# 将缩放后的图像放到大图中final_image[y_offset:y_offset + resized_img.shape[0], x_offset:x_offset + resized_img.shape[1]] = resized_img# 保存大图final_img_name = os.path.join(save_res_path, f"final_image_group_{group_index}.bmp")print(final_img_name)cv2.imwrite(final_img_name, final_image)

代码详解

小图缩放和裁剪: 每张图片的顶部 500 像素会被裁剪掉,然后根据目标尺寸进行缩放,以适应 4x4 网格中的单元格。

组合到大图: 使用 NumPy 创建一张空白的大图,然后将缩放后的图片依次放入对应的位置,最终形成 1280x1280 的大图。

分组处理: 如果有超过 16 张图片,代码会将它们分成多组,每组生成一张大图,并按组编号保存。

结果展示

最终生成的图像将被保存在 res_stack 文件夹中,每张大图包含 16 张小图,且尺寸为 1280x1280。你可以根据需要调整小图的尺寸、网格大小,以及大图的尺寸。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com