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


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

    1. 问题背景

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

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

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

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50

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

  • 相关阅读:
    设计模式概念学习
    IOS渲染流程之提交图层数据至RenderThread进程
    你的Web3域名 价值究竟何在?
    01 | Spring Data JPA 初识
    LambdaQueryWapper与QueryWapper的一些特殊用法
    git删除commit的历史大文件记录
    Spark基础:Kafka分布式消息系统
    重保特辑|筑牢第一道防线,云防火墙攻防演练最佳实践
    ABAP 面试题:如何使用 ABAP 编程语言的 System CALL 接口,直接执行 ABAP 服务器所在操作系统的 shell 命令?
    低代码平台上的出入库管理
  • 原文地址:https://blog.csdn.net/qq_44864833/article/details/133756608