将切分的图片筛选出有缺陷的

news2024/11/20 0:41:21

将切分的图片筛选出有缺陷的

  • 需求
  • 代码

需求

由于之前切分的图像有一些存在没有缺陷,需要再次筛选

将可视化的图像更改后缀
在这里插入图片描述
更改为xml的
在这里插入图片描述
可视化代码

可视化后只有7000多个图像
在这里插入图片描述

原本的图像有1W多张
在这里插入图片描述

在这里插入图片描述

代码

# 按照xml文件删除对应的图片
# coding: utf-8
from PIL import Image, ImageDraw, ImageFont
import os
import shutil
import cv2 as cv
import numpy as np
import json

#删除重名图象文件

def read_json(file_name):
    with open(file_name, 'rb') as f:
        data = json.load(f)
    return data

#读取源配置文件的路径
def delete1(image_root_path,suffix):
    delImg = []
    for root, dirs, files in os.walk(image_root_path):
        # 使用os模块获取文件夹中所有文件的路径
        all_files = os.listdir(root)
        filtered_files = [file for file in all_files if file.endswith(suffix)]
        if (len(filtered_files)):
            # print(root)  #当前工作文件夹
            for i in range(len(filtered_files)):
                bmp_path = root + "\\" + filtered_files[i]
                delImg.append(filtered_files[i])
    return delImg

#在目标文件中删除图象
def delete2(image_root_path,suffix,delImg):
    del_delImg = []
    for root, dirs, files in os.walk(image_root_path):
        # 使用os模块获取文件夹中所有文件的路径
        all_files = os.listdir(root)
        filtered_files = [file for file in all_files if file.endswith(suffix)]
        if (len(filtered_files)):
            print(root)  #当前工作文件夹
            for i in range(len(filtered_files)):
                bmp_path = root + "\\" + filtered_files[i]
                for j in range(len(delImg)):
                    if(delImg[j]==filtered_files[i]):
                        print(bmp_path)
                        del_delImg.append(bmp_path)
    return del_delImg


def myCopyImg(del_delImg,desPath):
    if(len(del_delImg)>0):
        for i in range(len(del_delImg)):
            bmp_path = del_delImg[i]
            #os.remove(bmp_path)
            shutil.copy(bmp_path, desPath)  # shutil.copy函数放入原文件的路径文件全名  然后放入目标文件夹
    else:
        print("无文件")

#替换列表中文件的后缀
def tihuanhouozhui(delImg):

    old_suffix1 = '.txt'
    old_suffix2 = '.xml'
    new_suffix = '.bmp'
    delImg = [file.replace(old_suffix1, new_suffix) for file in delImg]
    delImg = [file.replace(old_suffix2, new_suffix) for file in delImg]
    return delImg


if __name__ == "__main__":
    #my_copy("./1/kuaisu.json","D:\\code\\select\\1\\","D:\\code\\select\\final\\")
    delImg1 = delete1("G:\\datasets\\coco\\vis",".xml")
    #delImg2 = delete1("E:\\黄花标注\\glass\\testtt\\yesann", ".xml")
    #delImg = delImg1+delImg2
    #delImg = delImg1
    #new_delImg = tihuanhouozhui(delImg1)

    # for i in range(len(delImg)):
    #     os.remove(delImg[i])
    del_delImg = delete2("G:\\datasets\\coco\\split\\xml",".xml",delImg1)
    desPath = "G:\\datasets\\coco\\final"
    myCopyImg(del_delImg,desPath)






在这里插入图片描述
将xml复制过来了

同理复制jpg

也是先改名
(将vis中的文件改为jpg)

在这里插入图片描述
总图像文件:

在这里插入图片描述

然后使用代码:

# 按照xml文件删除对应的图片
# coding: utf-8
from PIL import Image, ImageDraw, ImageFont
import os
import shutil
import cv2 as cv
import numpy as np
import json

#删除重名图象文件

def read_json(file_name):
    with open(file_name, 'rb') as f:
        data = json.load(f)
    return data

#读取源配置文件的路径
def delete1(image_root_path,suffix):
    delImg = []
    for root, dirs, files in os.walk(image_root_path):
        # 使用os模块获取文件夹中所有文件的路径
        all_files = os.listdir(root)
        filtered_files = [file for file in all_files if file.endswith(suffix)]
        if (len(filtered_files)):
            # print(root)  #当前工作文件夹
            for i in range(len(filtered_files)):
                bmp_path = root + "\\" + filtered_files[i]
                delImg.append(filtered_files[i])
    return delImg

#在目标文件中删除图象
def delete2(image_root_path,suffix,delImg):
    del_delImg = []
    for root, dirs, files in os.walk(image_root_path):
        # 使用os模块获取文件夹中所有文件的路径
        all_files = os.listdir(root)
        filtered_files = [file for file in all_files if file.endswith(suffix)]
        if (len(filtered_files)):
            print(root)  #当前工作文件夹
            for i in range(len(filtered_files)):
                bmp_path = root + "\\" + filtered_files[i]
                for j in range(len(delImg)):
                    if(delImg[j]==filtered_files[i]):
                        print(bmp_path)
                        del_delImg.append(bmp_path)
    return del_delImg


def myCopyImg(del_delImg,desPath):
    if(len(del_delImg)>0):
        for i in range(len(del_delImg)):
            bmp_path = del_delImg[i]
            #os.remove(bmp_path)
            shutil.copy(bmp_path, desPath)  # shutil.copy函数放入原文件的路径文件全名  然后放入目标文件夹
    else:
        print("无文件")

#替换列表中文件的后缀
def tihuanhouozhui(delImg):

    old_suffix1 = '.txt'
    old_suffix2 = '.xml'
    new_suffix = '.bmp'
    delImg = [file.replace(old_suffix1, new_suffix) for file in delImg]
    delImg = [file.replace(old_suffix2, new_suffix) for file in delImg]
    return delImg


if __name__ == "__main__":
    #my_copy("./1/kuaisu.json","D:\\code\\select\\1\\","D:\\code\\select\\final\\")
    delImg1 = delete1("G:\\datasets\\coco\\vis",".jpg")
    #delImg2 = delete1("E:\\黄花标注\\glass\\testtt\\yesann", ".xml")
    #delImg = delImg1+delImg2
    #delImg = delImg1
    #new_delImg = tihuanhouozhui(delImg1)

    # for i in range(len(delImg)):
    #     os.remove(delImg[i])
    del_delImg = delete2("G:\\datasets\\coco\\split\\yes",".jpg",delImg1)
    desPath = "G:\\datasets\\coco\\final2"
    myCopyImg(del_delImg,desPath)






在这里插入图片描述

在这里插入图片描述

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

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

相关文章

Java比较器之equals、comparable、comparator

文章目录 前言一、基本类型比较1.2.equals3.和equals的区别 二、对象的比较1.覆写基类的equals2.基于Comparable接口类的比较3.基于Comparator比较器比较4.三种方式对比 前言 在Java中,基本类型的对象可以直接比较,而自定义类型,默认是用equ…

秋招面经记录

秋招面经记录 MySQLRedis项目分布式框架java网络数据结构设计模式HR手撕 MySQL Mysql中有1000万条数据,每次查询10条,该如何优化(答:Limit子查询优化) select t.* from t_topic t LIMIT 90000,10; 对上面的mysql语句说…

【Java 进阶篇】数据定义语言(DDL)详解

数据定义语言(DDL)是SQL(结构化查询语言)的一部分,它用于定义、管理和控制数据库的结构和元素。DDL允许数据库管理员、开发人员和其他用户创建、修改和删除数据库对象,如表、索引、视图等。在本文中&#x…

【C++杂货店】类和对象(上)

【C杂货店】类和对象(上) 一、面向过程和面向对象初步认识二、类的引入三、类的定义四、类的访问限定符及封装4.1 访问限定符4.2 封装 五、类的作用域六、类的实例化七、类对象模型7.1 类对象的存储规则7.2 例题7.3结构体内存对齐规则 八、this指针8.2 t…

【Spring Cloud】认识微服务架构,拆分简单的 Demo 实现服务的远程调用

文章目录 前言一、认识微服务1.1 服务架构的演变:从单体到微服务单体架构分布式架构微服务架构 1.2 微服务技术的对比:Dubbo、Spring Cloud、Spring Cloud Alibaba技术对比公司需求的选择 1.3 Spring Cloud:微服务框架的精华什么是 Spring Cl…

【Vue.js】使用ElementUI实现增删改查(CRUD)及表单验证

前言: 本文根据上篇实现数据表格(查所有)完善增删改功能,数据表格》查看数据表格的实现链接 一,增删改查 ①后端Controller(增删改查方法): package com.zking.ssm.controller;import com.zking.ssm.model.Book; import com.z…

新能源汽车行业出口ERP管理解决方案

中国汽车企业以史无前例的规模进军慕尼黑车展。本届展会,中国汽车参展企业数量达50家,是2021年的两倍。欧洲销售的新型电动汽车中,8%由中国品牌制造。2022年上半年,中国电动汽车的平均价格不到3.2万欧元(3.5万美元&…

香港云服务器和日本云服务器哪个好?(详细对比)

​  购置海外服务器时,您是在乎网络速度?价格?稳定性?当这几个因素同时存在,我们该如何选择?本篇针对海外热门的两个地区,中国香港和日本,这两种云服务器谁优谁劣?各有什么亮点?逐一进行对比分析。 一、速度上来看 中国香…

Tungsten Fabric数据量过大问题处理初探

开源SDN系统Tungsten Fabric面临数据产生过多问题。 经排查,产生数据多出自analytics组件的Cassandra数据库()。很多分析数据会存储至Cassandra库,并持久化处理。 没有特殊调整的话,目录在 /var/lib/docker/volumes/analytics_database_an…

春招秋招,大学生求职容易遇到哪些问题?

每到毕业季就有大批大学生从校园出来,他们怀抱梦想,希望能做出一番成绩。但现实总归是残酷的,有些人找不到工作,有一些人频繁跳槽,也有一些人最终找到的工作与自己的专业没有一点关系,迷茫好几年才找到方向…

数字音频工作站FL Studio 21中文版下载及电音编曲要用乐理吗 电音编曲步骤

FL Studio 21是一款强大的数字音频工作站(DAW)软件,为您提供一个完整的软件音乐制作环境。它是制作高质量的音乐、乐器、录音等的完整解决方案。该程序配备了各种工具和插件,帮助你创建专业的虚拟乐器,如贝斯、吉他、钢…

探索Moonbeam路由流动性的强大功能

Moonbeam的GMP预编译作为MRL的接口,有助于将带有Token的消息从GMP协议(通过XCMP)传输到与Moonbeam链接的平行链。 为何是个重磅消息?因为这项技术使得将流动性从外部区块链转移到其他波卡平行链成为可能! 这里补充一…

快手商品详情数据接口

快手商品详情数据接口的调用需要使用快手提供的API接口。API接口是一种程序之间进行交互的方式,它允许两个程序或者网页之间互相通信、交换数据。 快手API接口的具体使用方法和步骤需要您参考快手的官方文档或者开发者指南。在使用快手API接口时,您需要…

基于遗传算法解决的多仓库多旅行推销员问题(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

【Python基础】if __name__ == ‘__main__‘:和assert函数

📢:如果你也对机器人、人工智能感兴趣,看来我们志同道合✨ 📢:不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】 📢:文章若有幸对你有帮助,可点赞 👍…

day49 jdbc技术

一、概述 什么是JDBC Java DataBase COnnectivity Java 数据库连接 其实就是利用Java程序连接并访问数据库的一种技术 为什么要学习JDBC 之前我们是通过终端,或者第三方工具直接连接数据库 在企业开发中,更多的是通过程序来连接数据库的 未来学习的M…

docker部署MinIO集群

docker部署MinIO集群 1 拉取镜像 docker pull minio/minio:RELEASE.2023-08-16T20-17-30Z 2 启动集群节点命令 注意:要对配置文件中使用到的文件夹进行授权 version: 3 # 公共操作 x-minio-common: &minio-commonimage: minio/minio:RELEASE.2023-08-16T20-17…

SpringCloud nacos1.x.x版本升级到2.2.3版本并开启鉴权踩坑

近期由于服务器漏洞扫描,检测出nacos存在绕过登录鉴权漏洞,如图 需要进行升级并开启鉴权,就此次升级做下记录。 1.首先备份原来的nacos,导出配置文件作为备份; 2,从官网下载nacos-server-2.2.3.zip&#x…

华为云云耀云服务器L实例评测 | 实例使用教学之简单使用:通过 Docker 容器化技术在华为云云耀云服务器快速构建网站

华为云云耀云服务器L实例评测 | 实例使用教学之简单使用:通过 Docker 容器化技术在华为云云耀云服务器快速构建网站 介绍华为云云耀云服务器 华为云云耀云服务器 (目前已经全新升级为 华为云云耀云服务器L实例) 华为云云耀云服务器…