如何将多幅同尺寸图像中的Blob合并至同尺寸最终图像
解决方案
工具选择
OpenCV是更合适的选择:
- 你已基于OpenCV编写了初始代码,延续使用无需额外学习成本
- OpenCV的矩阵操作与图像处理API,能高效完成Blob提取、多图像像素融合这类任务
- 针对批量图像的阈值分割与像素级操作,OpenCV的性能优于Pillow
实现步骤
- 基于输入图像尺寸创建白色空白背景图
- 遍历所有输入图像,依次完成灰度化、二值化(提取黑色Blob区域)
- 将每幅图像中的Blob区域,按原位置叠加到空白背景图上
- 保存最终融合图像
完整可运行代码
import cv2 import numpy as np # 输入图像路径列表(支持任意数量图像) image_paths = ["im1.jpg", "im2.jpg"] # 获取输入图像尺寸,初始化白色背景图 sample_img = cv2.imread(image_paths[0], cv2.IMREAD_GRAYSCALE) height, width = sample_img.shape final_image = np.full((height, width), 255, dtype=np.uint8) for img_path in image_paths: # 灰度化处理 gray = cv2.imread(img_path, cv2.IMREAD_GRAYSCALE) # 二值化:自动阈值分割,Blob为黑色(0),背景为白色(255) _, binary = cv2.threshold(gray, 128, 255, cv2.THRESH_BINARY_INV | cv2.THRESH_OTSU) # 叠加Blob到最终图像:将对应位置设为黑色 final_image[binary == 0] = 0 # 保存结果 cv2.imwrite("merged_blobs.png", final_image)
代码细节说明
- 空白图初始化:用
np.full生成全白图像,确保与输入图像尺寸完全一致 - 二值化优化:使用
THRESH_BINARY_INV反转阈值结果,让原图像中的黑色Blob直接对应像素值0,简化后续叠加逻辑 - 批量兼容:通过列表管理图像路径,新增图像只需添加路径到列表即可
- 重叠处理:若Blob位置重叠,后续图像的Blob会覆盖之前的(符合需求中“重叠无需处理”的要求)
示例效果
输入图像
- 图像1:

- 图像2:

最终输出

内容的提问来源于stack exchange,提问作者Windy71
相关产品推荐
相关产品推荐

