单目标分割标签图叠加代码

本代码只适合两个图片合并,如果出现三个图片合并,就将第三个图删除,先合并一次,然后再将图片加入,再合并一次

1. 问题背景

单目标分割标签图叠加代码_第1张图片
单目标分割标签图叠加代码_第2张图片
单目标分割标签图叠加代码_第3张图片

有的时候标签有多个,需要将两张或者是多张图象叠加在一起,成为以下情况

单目标分割标签图叠加代码_第4张图片
单目标分割标签图叠加代码_第5张图片
单目标分割标签图叠加代码_第6张图片

2. 解决思路

  1. 遍历文件夹中所有图片
  2. 寻找具有相同文件名(前多少字相同)的图片
  3. 使用Image读取,转化为Numpy格式,进行数值相加
  4. 将Numpy格式转化为Image格式,然后保存
  5. 删除原始合并图象

3. 代码

'''
Descripttion: 
Result: 
Author: Philo
Date: 2023-10-10 15:24:46
LastEditors: Philo
LastEditTime: 2023-10-10 21:36:05
'''
from PIL import Image
import os
import numpy as np

# 设置图片文件夹路径
folder_path = 'Your_flod'

# 获取文件夹中的所有图片文件名
image_names = os.listdir(folder_path)
# image_files.sort()  # 确保文件按名称排序

def merge(first_img, second_img):
    fir_np = np.array(first_img)
    sec_np = np.array(second_img)
    # print(np.unique(fir_np), np.unique(sec_np)) 
    if len(fir_np.shape)==3:
        fir_np = np.array(first_img)[:,:,0]
    if len(sec_np.shape)==3:
        sec_np = np.array(second_img)[:,:,0]
    merge_np =  fir_np + sec_np
    merge_img = Image.fromarray(merge_np.astype("uint8"), mode="L")
    return merge_img

current_name = image_names[0]
for next_name in image_names[1:]:
    current_path = os.path.join(folder_path, current_name)
    next_path = os.path.join(folder_path, next_name)
        
    # 如果前一张图片为空或者当前图片名称的前..个字符与前一张不同,则跳过
    if  current_name[:18] == next_name[:18]:
        # 打开前一张图片和当前图片
        current_img = Image.open(current_path).convert('L')
        next_img = Image.open(next_path).convert('L')
        
        # 将两张图片进行数值相加
        save_img = merge(current_img, next_img)
        
        # 保存合并后的图片并删除当前图片
        # save_img.save("result/"+current_name) # 解开注释,将合并图象单独拎出来看
        save_img.save(current_path)
        os.remove(next_path)
    current_name = next_name

本代码只适合两个图片合并,如果出现三个图片合并,就将第三个图删除,先合并一次,然后再将图片加入,再合并一次

你可能感兴趣的:(深度学习储备知识,模型部件,pytorch,深度学习,人工智能,计算机视觉,机器学习)