变化检测数据集制作详细版

本文记录在进行变化检测数据集制作过程中所使用的代码

首先需要准备相同地区不同时间的两幅影像,裁减成合适大小,如256*256。相同区域命名相同放在两个文件夹下。

接着使用labelme对变化区域进行标注,这里不再进行labelme安装及标注的赘述。

在标注完成后,会在A、B两个文件夹下生成对应的json文件,A文件夹的json文件为对影像A的标注,B同上。

代码块包含四个部分:

1.json to png

2.同名png合并(处理AB都发生变化的标签)

3.独有png提取(处理只在A或B发生变化的标签)

4.png对应jpg提取(根据生成的标签检索AB)

1、将A的json文件放在Ajson文件夹,B同上,进行json转png

# json转png   开发时间:2023/5/13 21:19#------------------------------------------------------#
# 文件夹A\B所有影像
# 文件夹Ajson\Bjson所有json文件
#------------------------------------------------------#import json
import os
import numpy as np
import cv2def json_to_png(json_file_path, png_file_path):with open(json_file_path, 'r') as f:data = json.load(f)# 将json文件中的标注信息读取出来shapes = data['shapes']label_names = [shape['label'] for shape in shapes]# 获取每个标签对应的颜色值distinct_label_names = list(set(label_names))# 标签对应色彩字典label_name_to_color = {'1': (255, 255, 255)}# 创建空白的图片,并将每个像素点的值初始化为0img_height = data['imageHeight']img_width = data['imageWidth']img = np.zeros((img_height, img_width), dtype=np.uint8)# 为每个标注区域填充对应的颜色for shape in shapes:label_name = shape['label']color = label_name_to_color[label_name]points = shape['points']pts = np.array(points, np.int32)cv2.fillPoly(img, [pts], color=color)# 将生成的png图片保存到文件cv2.imwrite(png_file_path, img)if __name__ == '__main__':json_file_path = 'Ajson'json_fileList = os.listdir(json_file_path)for json_file in json_fileList:a = json_filefile_path_name = json_file_path + '/' + json_file# 截取文件名,用来命名图片name = os.path.splitext(file_path_name)[0]index = name + '.png'json_to_png(file_path_name, index)print(file_path_name, 'to', index)json_file_path_b = 'Bjson'json_fileList = os.listdir(json_file_path_b)for json_file in json_fileList:a = json_filefile_path_name = json_file_path_b + '/' + json_file# 截取文件名,用来命名图片name = os.path.splitext(file_path_name)[0]index = name + '.png'json_to_png(file_path_name, index)print(file_path_name, 'to', index)

2、按名称将A、B相同标签png的变化部分进行合并,使一对A、B的变化标签成为一张png

# 合并两个文件夹下相同名称的两张png标签
#
# 开发时间:2023/5/18 16:38
import os
from PIL import Imagedef merge(path1, path2, path3):img1 = Image.open(path1)img2 = Image.open(path2)width, height = img1.sizenew_img = Image.new('L', (width, height), 0)for x in range(width):for y in range(height):pixel1 = img1.getpixel((x, y))pixel2 = img2.getpixel((x, y))if pixel1 == 255 or pixel2 == 255:new_img.putpixel((x, y), 255)else:new_img.putpixel((x, y), 0)file_name = os.path.split(path1)[1]path_new = os.path.join(path3, file_name)# 保存新的图片new_img.save(path_new)# 提取需要合并的同名文件
A_file_path = 'Ajson'
A_fileList = os.listdir(A_file_path)B_file_path = 'Bjson'
B_fileList = os.listdir(B_file_path)result = 'result'Alist = []
for file_a in A_fileList:Alist.append(file_a)Blist = []
for file_b in B_fileList:Blist.append(file_b)common_set = set(Alist).intersection(set(Blist))common_list = list(common_set)if len(common_list) == 0:print("这两个列表没有相同的元素")
else:print("这两个列表有相同的元素:")print(len(common_list))for item in common_list:print(item)print(len(common_list))for item in common_list:path_a = os.path.join(A_file_path, item)path_b = os.path.join(B_file_path, item)path_result = resultif not os.path.exists(path_result):os.makedirs(path_result)merge(path_a, path_b, path_result)
print('merge successfully!!!')

3、检测AB文件夹下的文件的交集并集情况,把AB中独有的图片放进result

# 检测AB文件夹下的文件的交集并集情况,把AB中独有的图片放进result
#
# 开发时间:2023/5/19 10:09
import os
import shutilfolder1 = "Ajson"
folder2 = "Bjson"
result = 'result'
if not os.path.exists(result):os.makedirs(result)files1 = set(os.listdir(folder1))
files2 = set(os.listdir(folder2))common_files = files1.intersection(files2)# 获取不同的文件名
# different_files = files1.difference(files2).union(files2.difference(files1))
# A中独有的标签
different_filesA = files1.difference(files2)
# B中独有的标签
different_filesB = files2.difference(files1)# 将AB独有的标签放进result
for a in different_filesA:pngA = os.path.join(folder1, a)pngA_new = os.path.join(result, a)shutil.copy(pngA, pngA_new)for b in different_filesB:pngB = os.path.join(folder2, b)pngB_new = os.path.join(result, b)shutil.copy(pngB, pngB_new)# 输出结果
print("相同的文件名:", common_files)
print("相同的文件数量:", len(common_files))print("A独有的文件名:", different_filesA)
print("A独有的文件数量:", len(different_filesA))print("B独有的文件名:", different_filesB)
print("B独有的文件数量:", len(different_filesB))print('detection successfully!!!')

4、按照标签统计结果检索AB中对应的变化标签(此步骤如不需要可以不进行)

# 提取出result中的png对应于AB文件夹的jpg文件
#
# 开发时间:2023/5/25 8:27import os
import shutilfolder1 = "A_rea"
folder2 = "B_rea"
result = 'result'
# 原始ab文件夹
allA = 'A'
allB = 'B'if not os.path.exists(folder1):os.makedirs(folder1)
if not os.path.exists(folder2):os.makedirs(folder2)# 获取result文件夹中的所有文件名
files_result = set(os.listdir(result))# 修改后缀
name = []
for item in files_result:name.append(item.split('.')[0])for i in name:imgName = i + '.jpg'pathA = os.path.join(folder1, imgName)pathB = os.path.join(folder2, imgName)oldA = os.path.join(allA, imgName)oldB = os.path.join(allB, imgName)shutil.copy(oldA, pathA)shutil.copy(oldB, pathB)# 输出结果print("正在处理:", oldA)print("文件数量:", len(name))
print('Same_A_B successfully!!!')

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

支持语音与视频即时通讯项目杂记(一)

第一部分解释服务端的实现。 (服务端结构) 下面一个用于实现TCP服务器的代码,包括消息服务器(TcpMsgServer)和文件中转服务器(TcpFileServer)。 首先,TcpServer是TcpMsgServer和Tcp…

语音识别whisper的介绍、安装、错误记录

介绍 Whisper是OpenAI于2022年9月份开源的通用的语音识别模型。它是在各种音频的大型数据集上训练的模型,也是一个可以执行多语言语音识别、语音翻译和语言识别的多任务模型。 论文链接:https://arxiv.org/abs/2212.04356 github链接:https:…

手部关键点检测4:Android实现手部关键点检测(手部姿势估计)含源码 可实时检测

目录 1. 前言 2.手部关键点检测(手部姿势估计)方法 (1)Top-Down(自上而下)方法 (2)Bottom-Up(自下而上)方法: 3.手部关键点检测模型训练 4.手部关键点检测模型Android部署 (1) 将Pytorch模型转换ONNX模型 (2) …

日常中msvcp71.dll丢失怎样修复?分享5个修复方法

在 Windows 系统中,msvcp71.dll 是一个非常重要的动态链接库文件,它承载了许多应用程序和游戏的运行。如果您的系统中丢失了这个文件,那么您可能会遇到无法打开程序、程序崩溃或出现错误提示等问题。本文将介绍 5 个快速修复 msvcp71.dll 丢失…

Linux —— 网络基础(一)

目录 一,计算机网络背景 二,网络协议初识 三,网络传输基本流程 四,网络中的地址管理 一,计算机网络背景 网络发展 独立模式,计算机之间相互独立;网络互联,多台计算机连接在一起…

新手如何找到Docker容器(redis)中的持久化文件?

具体步骤 要查看Docker容器的dump.rdb和appendonly.aof文件(如果启用了AOF持久化)的位置,我们需要知道容器中Redis配置文件的内容或者容器的数据卷的挂载位置。 这里是一般步骤: 查找容器的数据卷挂载位置 使用docker inspect命令…

无人机UAV目标检测与跟踪(代码+数据)

前言 近年来,随着无人机的自主性、灵活性和广泛的应用领域,它们在广泛的消费通讯和网络领域迅速发展。无人机应用提供了可能的民用和公共领域应用,其中可以使用单个或多个无人机。与此同时,我们也需要意识到无人机侵入对空域安全…

最新视频/图集去水印小程序源码/步数小程序源码/王者战力小程序源码/红包封面小程序源码

自带多平台解析接口 短视频去水印图集水印小程序源码 ,这是一款支持多种平台去水印的一款微信小程序源码 支持短视频去水印,还有图集去水印等。内含多平台去水印接口,响应的速度也是非常的快,这是一款非常值得推荐的一款小程序源…

云表|低代码开发崛起:重新定义企业级应用开发

低代码开发这个概念在近年来越来越受到人们的关注,市场对于低代码的需求也日益增长。据Gartner预测,到2025年,75%的大型企业将使用至少四种低代码/无代码开发工具,用于IT应用开发和公民开发计划。 那么,为什…

Shiro安全框架登录验证实例解析

一、Shiro框架简单介绍 Apache Shiro是Java的一个安全框架,旨在简化身份验证和授权。Shiro在JavaSE和JavaEE项目中都可以使用。它主要用来处理身份认证,授权,企业会话管理和加密等。Shiro的具体功能点如下: (1&#…

java并发编程之基础与原理1

java多线程基础 下面说一下线程的7种状态 下面我重点来说一下阻塞状态 阻塞状态是可以分很多种的: 下面用另外一张图来说明这种状态 简单说一下线程的启动原理 下面说一下java中的线程 java线程的异步请求方式 上面就会先把main执行出来,等阻塞结束之后…

Keil实现Flash升级跳转(STM32/GD32/HC32)

编写BOOT程序,和APP程序。 BOOT程序检查OTA参数,执行OTA升级,然后跳转到APP代码。 记录一下跳转APP需要修改得东西: 1、BOOT程序 修改跳转地址 先检查APP地址是否有效 然后关闭外设 反初始化 设置MSP指针,进行跳转 …

工控机通过Profinet转Modbus RTU网关连接变频器与电机通讯案例

在工业自动化系统中,工控机扮演着重要的角色,它是数据采集、处理和控制的中心。工控机通过Profinet转Modbus RTU网关连接变频器与电机通讯,为工业自动化系统中的设备之间的通信提供了解决方案。工控机通过Profinet转Modbus RTU网关的方式&…

C语言进行实验:通过程序实现线算图取值【支持VC++ 6.0编辑器环境运行】

背景: 一、实验目的和要求 1、能描述数据基本类型及其常量的表示方法; 2、会对变量进行定义及初始化; 3、能使用运算符与表达式对变量赋值; 4、会描述C语句的概念及种类、C语言常用的输入/出方式; 5、会设计顺序…

python+pytest接口自动化之测试函数、测试类/测试方法的封装

前言 今天呢,笔者想和大家聊聊pythonpytest接口自动化中将代码进行封装,只有将测试代码进行封装,才能被测试框架识别执行。 例如单个接口的请求代码如下: import requestsheaders {"user-agent": "Mozilla/5.0…

【微信小程序】自定义组件布局会议OA其他页面(附源码)

🎉🎉欢迎来到我的CSDN主页!🎉🎉 🏅我是Java方文山,一个在CSDN分享笔记的博主。📚📚 🌟推荐给大家我的专栏《微信小程序开发实战》。🎯&#x1f3a…

JOSEF约瑟 JD3-40/23 JD3-70/23漏电继电器 AC220V\0.05-0.5A

JD3系列漏电继电器(以下简称继电器)适用于交流电压至1140V,频率为50Hz,该继电器与分励脱扣器或失压脱扣器的断路器、交流接触器、磁力启动器等组成漏电保护装置,作漏电和触电保护之用,可配备蜂鸣器、信号等…

【会议征稿通知】第三届大数据经济与数字化管理国际学术会议(BDEDM 2024)

2024 3rd International Conference on Big Data Economy and Digital Management 第三届大数据经济与数字化管理国际学术会议(BDEDM 2024) 第三届大数据经济与数字化管理国际学术会议(BDEDM 2024)将于2024年1月12-14日于宁波召…

性能测试-redis常见问题

缓存击穿、缓存穿透、缓存雪崩 缓存雪崩 解决办法 1.设置缓存失效时间,不要在同一时间 2.redis集群部署 3.不设置缓存设置时间 4.定时刷缓存的时间 缓存穿透 请求不管返回什么数据都返回给redis对参数合法器进行验证,不合法的时候直接过滤掉使用布…

周四见|物流人的一周资讯

中国生鲜快消品电商渗透率居全球首位 10月19日消息,中国连锁经营协会与贝恩公司近日联合发布《2023中国生鲜快消品零售业态发展趋势研究》,报告指出,当前,中国生鲜快消品零售市场正处于电商渗透率引领全球,但集中度较…