当前位置: 首页 > news >正文

多文件夹图片预处理:清除空值、重置大小、分割训练集

清理空值 防止出现cannot identify image file

参考Python数据清洗----删除读取失败图片__简单版_python用pil读取图片出错删除掉-CSDN博客

import os
import shutil
import warnings
import cv2
import iofrom PIL import Image
warnings.filterwarnings("error", category=UserWarning)PATH1 = "./dataclean" #总路径
i = 0def is_read_successfully(file):try:imgFile = Image.open(file)return Trueexcept Exception:return Falseif __name__=="__main__":#子文件夹for childPATH in os.listdir(PATH1):#子文件夹路径childPATH = PATH1 + '/'+ str(childPATH)for parent, dirs, files in os.walk(PATH1):for file in files:if not is_read_successfully(os.path.join(parent, file)):print(os.path.join(parent, file))i = i + 1os.remove(os.path.join(parent, file)) print(i)

重置大小 参考python批量修改图片尺寸(含多个文件夹)_python 修改路径下多个子文件下图片尺寸并重新保存-CSDN博客

# -*- coding: utf-8 -*-
import cv2
import matplotlib.pyplot as plt
import os
import re
import sys
from PIL import Image
import string
import numpy as np
PATH1 = 'dataclean'  #总路径
def resizeImage(file,NoResize):image = cv2.imread(file,cv2.IMREAD_COLOR)#如果type(image) == 'NoneType',会报错,导致程序中断,所以这里先跳过这些图片,#并记录下来,结束程序后手动修改(删除)if image is None:NoResize += [str(file)]else:resizeImg = cv2.resize(image,(100,100))#100*100大小cv2.imwrite(file,resizeImg)cv2.waitKey(100)def resizeAll(root):#待修改文件夹fileList = os.listdir(root)currentpath = os.getcwd()   #将当前工作目录修改为待修改文件夹的位置    os.chdir(root)NoResize = []  #记录没被修改的图片for file in fileList:       #遍历文件夹中所有文件file = str(file)resizeImage(file,NoResize)print("---------------------------------------------------")os.chdir(currentpath)       #改回程序运行前的工作目录sys.stdin.flush()       #刷新print('没被修改的图片: ',NoResize)if __name__=="__main__":#子文件夹for childPATH in os.listdir(PATH1):#子文件夹路径childPATH = PATH1 + '/'+ str(childPATH)# print(childPATH)resizeAll(childPATH)print('------修改完成')

划分训练集测试集 参考【深度学习】使用python划分数据集为训练集和验证集和测试集并放在不同的文件夹_深度学习中有没有直接划分训练集、验证集和测试集的函数-CSDN博客

import os
import random
import shutil
from shutil import copy2"""os.listdir会将文件夹下的文件名集合成一个列表并返回"""
def getDir(filepath):pathlist=os.listdir(filepath)return pathlistdef mkTotalDir(data_path):os.makedirs(data_path)dic=['train','test']for i in range(0,2):current_path=data_path+dic[i]+'/'#这个函数用来判断当前路径是否存在,如果存在则创建失败,如果不存在则可以成功创建isExists=os.path.exists(current_path)if not isExists:os.makedirs(current_path)print('successful '+dic[i])else:print('is existed')return
"""传入的参数是n类图像原本的路径,返回的是这个路径下各类图像的名称列表和图像的类别数"""
def getClassesMes(source_path):classes_name_list=getDir(source_path)classes_num=len(classes_name_list)return classes_name_list,classes_numdef mkClassDir(source_path,change_path):classes_name_list,classes_num=getClassesMes(source_path)for i in range(0,classes_num):current_class_path=os.path.join(change_path,classes_name_list[i])isExists=os.path.exists(current_class_path)if not isExists:os.makedirs(current_class_path)print('successful '+classes_name_list[i])else:print('is existed')#source_path:原始多类图像的存放路径
#train_path:训练集图像的存放路径
#validation_path:验证集图像的存放路径D:\RSdata_dir\NWPU-RESISC45\\
#test_path:测试集图像的存放路径def divideTrainValidationTest(source_path,train_path,test_path):"""先获取五类图像的名称列表和类别数目"""classes_name_list,classes_num=getClassesMes(source_path)mkClassDir(source_path,train_path)mkClassDir(source_path,test_path)"""先将一类图像的路径拿出来,将这个路径下所有这类的图片做成列表,使用os.listdir函数,然后再将列表里面的所有图像名进行shuffle就是随机打乱,然后从打乱后的图像中抽7成放入训练集,3成放入测试集的图像名称列表"""for i in range(0,classes_num):source_image_dir=os.listdir(source_path+classes_name_list[i]+'/')random.shuffle(source_image_dir)train_image_list=source_image_dir[0:int(0.7*len(source_image_dir))]test_image_list=source_image_dir[int(0.7*len(source_image_dir)):]for train_image in train_image_list:origins_train_image_path=source_path+classes_name_list[i]+'/'+train_imagenew_train_image_path=train_path+classes_name_list[i]+'/'copy2(origins_train_image_path,new_train_image_path)for test_image in test_image_list:origins_test_image_path=source_path+classes_name_list[i]+'/'+test_imagenew_test_image_path=test_path+classes_name_list[i]+'/'copy2(origins_test_image_path,new_test_image_path)if __name__=='__main__':source_path = './dataclean/'data_path = './data/'      #运行时自动新建的文件夹train_path = './data/train/'test_path = './data/test/'mkTotalDir(data_path)divideTrainValidationTest(source_path, train_path, test_path)

相关文章:

多文件夹图片预处理:清除空值、重置大小、分割训练集

→ 清理空值 防止出现cannot identify image file 参考Python数据清洗----删除读取失败图片__简单版_python用pil读取图片出错删除掉-CSDN博客 import os import shutil import warnings import cv2 import iofrom PIL import Image warnings.filterwarnings("error&qu…...

【Java】集合 之 使用 Map

为什么使用Map 我们知道,List是一种顺序列表,如果有一个存储学生Student实例的List,要在List中根据name查找某个指定的Student的分数,应该怎么办? 最简单的方法是遍历List并判断name是否相等,然后返回指定…...

第二证券:股票几点到几点开盘?

作为股民或许投资者,我们都知道股票是每天都有开盘和收盘时间的。但是,关于股票的开盘时间,很多人并不是很清楚,特别是初学者。在本文中,我们将从多个视点分析股票开盘时间,并为大家供给一些有用的信息。 …...

goweb入门教程

本文是作者自己学习goweb时写的笔记,分享给大家,希望能有些帮助 前言: 关于web:本质 ​ ​ web中最重要的就是浏览器和服务器的request(请求)和response(响应); ​ 一个请求对应一个响应。 一个请求对应一个响应&…...

量子计算:探索未来的计算技术

量子计算:探索未来的计算技术 引言 在过去的几十年里,我们见证了计算机技术从简单的计算和存储发展到复杂的数据处理和人工智能的飞速进步。然而,随着我们进一步探索科技的前沿,传统的计算方法开始显示出其局限性。在这种情况下,量子计算——一种基于量子力学原理的新型计…...

HarmonyOS应用开发者基础认证考试题目及答案

一、判断题 Ability是系统调度应用的最小单元,是能够完成一个独立功能的组件。一个应用可以包含一个或多个Ability。 正确(True) 所有使用Component修饰的自定义组件都支持onPageShow,onBackPress和onPageHide生命周期函数。 错误(False) 每调用一次ro…...

c# 文件读取和写入

文件写入 using System.Collections.Generic; namespace demo1;/// <summary> /// System.IO下的所有的Stream类是所有数据流的基类 /// 流是用于传输数据的对象&#xff0c;流就是用来传输数据的 /// 数据传输的两种方式&#xff1a;1、数据从外部源传输到程序中&#…...

【MySQL库的操作】

目录&#xff1a; 前言库的操作创建数据库字符集和校验规则校验规则对数据库的影响 选择和查看数据库修改数据库删除数据库备份注意事项查看连接情况 总结 前言 剑指offer&#xff1a;一年又二天 库的操作 创建、选择、查看、修改、删除与备份。 创建数据库 CREATE DATABASE…...

rocketmq 集群环境部署及与spring cloud 集成

1 下载zip 安装包 rocketmq-all-5.1.4-bin-release.zip 2 修改启动配置&#xff0c;防止默认内存配置过高 runserver.sh/runbroker.sh/tools.sh 3 启动namesrv nohup sh bin/mqnamesrv >>namesrv.log & 4 启动brokerproxy 单点模式&#xff1a; nohup sh bin…...

SpringBoot——配置及原理

优质博文&#xff1a;IT-BLOG-CN 一、Spring Boot全局配置文件 application.properties与application.yml配置文件的作用&#xff1a;可以覆盖SpringBoot配置的默认值。 ◀ YML&#xff08;is not a Markup Language&#xff1a;不仅仅是一个标记语言&#xff09;&#xff1…...

fiddler抓包安卓

一、打断点 1、安卓手机和电脑在同一局域网下&#xff0c;手机连接的网络开启手动代理&#xff0c;ip填写电脑ip&#xff0c;端口填写fiddler中配置的端口。 ip查看&#xff1a; 端口配置&#xff1a;tools-options-connections 2、安装证书&#xff0c;手机浏览器输入电脑ip…...

Maven 进阶学习指南---setting详解

前言 当我们在开发项目时&#xff0c;有时需要用到外部依赖组件&#xff0c;例如当我们需要 Json 序列化的时候需要用到 FastJson 组件&#xff0c;我们可以通过下载对应 jar 包加载到项目中。但当一个大的项目同时需要依赖各种各样的外部服务&#xff0c;就存在着配置繁琐、依…...

人工智能与我们的生活

人工智能对我们的生活影响有多大 1. 人工智能的领域 人工智能涉及的领域广泛&#xff0c;包括但不限于&#xff1a; a. 医疗保健领域 人工智能在医疗诊断、药物研发、患者管理等方面发挥了重要作用。医疗影像分析、基因组学研究等都受益于人工智能技术&#xff0c;为医学领…...

前端将blob转换为可下载的url及下载

一.转换 //将blob转换为url const changeBlobToUrl blobData > {return new Promise(resolve > {//创建Blob对象const blob new Blob([blobData])// 创建FileReader对象const reader new FileReader()reader.onload function (e) {resolve(e.target.result)}// 使用F…...

LVS-DR实验

实验前准备 DR服务器&#xff1a;192.168.188.11 192.168.188.15 NFS服务器&#xff1a;192.168.188.14 Web服务器1&#xff1a;192.168.188.12 Web服务器2&#xff1a;192.168.188.13 Vip&#xff1a;192.168.188.188 客户端&#xff1a;192.168.188.200 配置负载均衡调度…...

MYSQL索引使用注意事项

索引使用注意事项&#xff1a; 1.索引列运算 不要在索引列上进行运算操作&#xff0c;否则索引将失效&#xff1b; 2.字符串不加引号 字符串类型使用时&#xff0c;不加引号&#xff0c;否则索引将失效&#xff1b; 3.模糊查询 如果仅仅是尾部模糊匹配&#xff0c;索引将不会失…...

深入理解Java中的String、StringBuilder和StringBuffer(每天一个技术点,第一天)

大家好&#xff0c;我是你们的博主每天一个技术点。今天&#xff0c;我们将探讨Java中的一个重要主题&#xff1a;String、StringBuilder和StringBuffer。这些类在Java编程中无处不在&#xff0c;但它们之间的区别和用法可能并不是所有人都清楚。所以&#xff0c;让我们深入了解…...

PHP逻辑运算符学习资料

PHP逻辑运算符 在PHP中&#xff0c;逻辑运算符用于组合和比较不同的逻辑条件。下面是PHP中常用的逻辑运算符示例&#xff1a; 1. 与运算符&#xff08;&& 或 and&#xff09; $age 25; $isStudent true;if ($age > 18 && $isStudent) {echo "You …...

深入解析CPU工作原理与细节

计算机是现代社会中不可或缺的工具&#xff0c;而CPU&#xff08;中央处理器&#xff09;则是计算机的核心组件。CPU负责执行指令和控制计算机的各种操作&#xff0c;它的性能直接影响着计算机的速度和效率。 1. CPU的基本结构 CPU通常由以下几个主要组成部分构成&#xff1a…...

计算机网络(超详解!) 第二节 物理层(上)

1.物理层的基本概念 物理层考虑的是怎样才能在连接各种计算机的传输媒体上传输数据比特流&#xff0c;而不是指具体的传输媒体。 物理层的作用是要尽可能地屏蔽掉不同传输媒体和通信手段的差异。 用于物理层的协议也常称为物理层规程(procedure)。 2.物理层的主要任务 主要…...

XCTF-web-easyupload

试了试php&#xff0c;php7&#xff0c;pht&#xff0c;phtml等&#xff0c;都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接&#xff0c;得到flag...

23-Oracle 23 ai 区块链表(Blockchain Table)

小伙伴有没有在金融强合规的领域中遇见&#xff0c;必须要保持数据不可变&#xff0c;管理员都无法修改和留痕的要求。比如医疗的电子病历中&#xff0c;影像检查检验结果不可篡改行的&#xff0c;药品追溯过程中数据只可插入无法删除的特性需求&#xff1b;登录日志、修改日志…...

[Java恶补day16] 238.除自身以外数组的乘积

给你一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法&#xff0c;且在 O(n) 时间复杂度…...

Rapidio门铃消息FIFO溢出机制

关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系&#xff0c;以下是深入解析&#xff1a; 门铃FIFO溢出的本质 在RapidIO系统中&#xff0c;门铃消息FIFO是硬件控制器内部的缓冲区&#xff0c;用于临时存储接收到的门铃消息&#xff08;Doorbell Message&#xff09;。…...

优选算法第十二讲:队列 + 宽搜 优先级队列

优选算法第十二讲&#xff1a;队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...

系统掌握PyTorch:图解张量、Autograd、DataLoader、nn.Module与实战模型

本文较长&#xff0c;建议点赞收藏&#xff0c;以免遗失。更多AI大模型应用开发学习视频及资料&#xff0c;尽在聚客AI学院。 本文通过代码驱动的方式&#xff0c;系统讲解PyTorch核心概念和实战技巧&#xff0c;涵盖张量操作、自动微分、数据加载、模型构建和训练全流程&#…...

ubuntu系统文件误删(/lib/x86_64-linux-gnu/libc.so.6)修复方案 [成功解决]

报错信息&#xff1a;libc.so.6: cannot open shared object file: No such file or directory&#xff1a; #ls, ln, sudo...命令都不能用 error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory重启后报错信息&…...

2025-05-08-deepseek本地化部署

title: 2025-05-08-deepseek 本地化部署 tags: 深度学习 程序开发 2025-05-08-deepseek 本地化部署 参考博客 本地部署 DeepSeek&#xff1a;小白也能轻松搞定&#xff01; 如何给本地部署的 DeepSeek 投喂数据&#xff0c;让他更懂你 [实验目的]&#xff1a;理解系统架构与原…...

python打卡第47天

昨天代码中注意力热图的部分顺移至今天 知识点回顾&#xff1a; 热力图 作业&#xff1a;对比不同卷积层热图可视化的结果 def visualize_attention_map(model, test_loader, device, class_names, num_samples3):"""可视化模型的注意力热力图&#xff0c;展示模…...

PostgreSQL 与 SQL 基础:为 Fast API 打下数据基础

在构建任何动态、数据驱动的Web API时&#xff0c;一个稳定高效的数据存储方案是不可或缺的。对于使用Python FastAPI的开发者来说&#xff0c;深入理解关系型数据库的工作原理、掌握SQL这门与数据库“对话”的语言&#xff0c;以及学会如何在Python中操作数据库&#xff0c;是…...