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

news2024/9/28 7:18:49

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1078308.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Redis学习6——新数据类型

Bitmaps bitfield HyperLog Geographic Stream 重点来了 redis各个数据类型的操作命令可以到:http://www.redis.cn/commands.html查看

面试经典 150 题 20 —(数组 / 字符串)— 151. 反转字符串中的单词

151. 反转字符串中的单词 方法一 class Solution { public:string reverseWords(string s) {istringstream instr(s);vector<string> words{};string word;while(instr>>word){words.push_back(word);}int length words.size();string result words[length-1];f…

怒刷LeetCode的第26天(Java版)

第一题 题目来源 64. 最小路径和 - 力扣&#xff08;LeetCode&#xff09; 题目内容 解决方法 方法一&#xff1a;动态规划 可以使用动态规划来解决这个问题。 首先创建一个与网格大小相同的二维数组dp&#xff0c;用于存储从起点到每个位置的最小路径和。然后初始化dp[0…

shiro反序列化和log4j

文章目录 安装环境shiro漏洞验证log4j 安装环境 进入vulhb目录下的weblogic&#xff0c;复现CVE-2018-2894漏洞&#xff1a; cd /vulhub/shiro/CVE-2010-3863查看docker-compose的配置文件&#xff1a; cat docker-compose.yml如图&#xff0c;里面有一个镜像文件的信息和服…

136.【JUC并发编程_02】

JUC并发编程 (四)、共享模型之管程1.wait notify(1).小故事_为什么需要wait(2).wait notify 的工作原理(3).API介绍 2.wait notify 的正确使用步骤 ⭐(1).sleep 和 wait 的区别(2).步骤1_产生的问题(3).步骤2_wait notify 改进产生问题(4).步骤3_产生叫错人问题 (虚假唤醒)(5).…

opencv安装成功之后运行代码还是出错

错误提示 Traceback (most recent call last): File "F:\download\55957_人工智能基础与应用&#xff08;微课版&#xff09;_源代码\OpenCV\camera.py", line 4, in <module> import cv2 File "F:\software\anaconda\envs\tensorflow\cv2\__init__.py&q…

Unity 热更新技术 | (一) 热更新的基本概念原理及主流热更新方案介绍

&#x1f3ac; 博客主页&#xff1a;https://xiaoy.blog.csdn.net &#x1f3a5; 本文由 呆呆敲代码的小Y 原创&#xff0c;首发于 CSDN&#x1f649; &#x1f384; 学习专栏推荐&#xff1a;Unity系统学习专栏 &#x1f332; 游戏制作专栏推荐&#xff1a;游戏制作 &…

什么是强缓存、协商缓存?

为了减少资源请求次数,加快资源访问速度,浏览器会对资源文件如图片、css文件、js文件等进行缓存,而浏览器缓存策略又分为强缓存和协商缓存,什么是强缓存?什么是协商缓存?两者之间的区别又是什么?接下来本文就带大家深入了解这方面的知识。 强缓存 所谓强缓存,可以理解…

声音生成评价项目AudioLDM_eval项目配置过程

文章目录 引言正文问题一&#xff1a;模型下载不了问题二 TypeError: pad_center() takes 1 positional argument but 2 were given问题三 AttributeError: module numpy has no attribute complex. 结果 引言 对于生成的声音&#xff0c;如何进行评价&#xff0c;一般是通过计…

Matlab之查询子字符串在字符串中的起始位置函数strfind

一、功能 strfind函数用于在一个字符串中查找指定的子字符串&#xff0c;并返回子字符串在字符串中的起始位置。 二、语法 indices strfind(str, pattern) 其中&#xff0c;str是要进行查找的字符串&#xff0c;pattern是要查找的子字符串。 函数会返回一个由子字符串在字…

网络与信息安全基础知识 (软件设计师笔记)

&#x1f600;前言 在当今世界&#xff0c;我们见证了科技&#xff0c;特别是网络技术的繁荣发展&#xff0c;这种发展不仅让我们的生活变得更加便捷&#xff0c;但也带来了一系列的安全问题。网络安全不仅关系到每一个上网的个人&#xff0c;更是关乎到国家的安全和社会的稳定…

大数据要怎么样学才可以到企业级实战

大数据在企业级实战中扮演着重要角色&#xff0c;因此掌握大数据技术和应用是非常有价值的。下面将详细介绍学习大数据并达到企业级实战水平的步骤和方法。 一、基础知识准备 1. 数据基础知识&#xff1a;了解数据的概念、类型、结构等基本概念&#xff0c;并熟悉常见的数据处…

Edge 无法登录/同步问题【一招搞定】

目录 前言 一、打开 Edge 浏览器显示未同步&#xff0c;点击同步无效 二、Edge 登录报错 0x801901f4 或 0x80190001 解决方法 2.1 报错 0x801901f4 解决方法 2.1.0 Edge 登陆报错图示 2.1.1 添加 Edge 推荐的 DNS 地址 2.1.2 重新登录 Edge 账号成功 2.2 报错 0x801…

第四章 树和二叉树

第四章 树和二叉树 树的基本概念树的概念树的相关术语 二叉树二叉树基本概念二叉树的性质 二叉树的存储结构二叉树的顺序存储结构二叉树的链式存储结构 二叉树的遍历二叉树遍历的递归实现二叉树的层次遍历二叉树遍历的非递归实现 树和森林树的存储结构树、森林与二叉树的关系树…

【低代码开发】:低代码开发助力应用创新

低代码开发&#xff1a;加速应用开发的未来趋势 引言什么是低代码以及功能特点&#xff1f;什么是低代码开发&#xff1f;低代码平台的特点和功能低代码平台的应用场景和优势低代码的优点低代码的缺点低代码平台项目开发流程选择和实施低代码平台 低代码未来的发展趋势低代码平…

Java基础(变量篇)

变量是Java程序中基本的存储单元&#xff0c;变量名有三个基本要素&#xff1a;数据类型、变量名和值。变量名是一块内存单元的名称&#xff0c;就像门牌号一样&#xff0c;通过变量可以找到它表示的内存单元&#xff0c;并对这块内存单元进行操作。在Java中变量必须声明后使用…

英国/法国/意大利/德国/西班牙,电动交通设备配件等相关政策更新

产品安全 合规政策更新&#xff01; 首先请看邮件内容 尊敬的卖家&#xff1a; 您好&#xff01; 我们此次联系您是因为您正在销售需要审批流程的商品。为此&#xff0c;亚马逊正在实施审批流程&#xff0c;以确认我们网站上提供的商品类型须符合指定的认证标准。要在亚马逊…

Cesium小技巧:快速打开API文档

学习Cesium.js的人&#xff0c;肯定经常看官方示例&#xff0c; 网址如下&#xff1a; https://sandcastle.cesium.com/ 有个小技巧&#xff0c;可以快速打开具体类的API文档 在示例中&#xff0c;双击具体类名或方法名&#xff0c;会出现一个提示框 单击或右键菜单-在新标…

Linux系统编程:Linux基础

Linux基本使用 安装 这就不说了网上很多教程&#xff0c;随便一个Linux版本都可以&#xff0c;因为命令都差不多。 检查是否有网络 检查网络有以下几个推测方法&#xff0c;如果没有网络的话就按照这几个可能出现问题的地方对症下药寻找解决办法即可&#xff1a; ctrl al…

蓝桥杯基础---切面条

切面条 一根高筋拉面&#xff0c;中间切一刀&#xff0c;可以得到2根面条。 如果先对折1次&#xff0c;中间切一刀&#xff0c;可以得到3根面条。 如果连续对折2次&#xff0c;中间切一刀&#xff0c;可以得到5根面条。 那么&#xff0c;连续对折10次&#xff0c;中间切一刀…