数据集制作之格式转换一

1. 问题描述

  • 问题:制作数据集收集图片时容易存在图片格式不统一的问题。当在进行模型训练时,有的程序报错。本人在训练yolov5(2021年3月版本)时便遇到了,具体报错信息忘了保存。

  • 分析:通过错误信息的提示,是由于读取时遇到了未知文件格式,导致了读取失败。因此我猜想是因为图片格式不统一带来的问题。

  • 背景:最初始的图片存在jpg和png图片两种格式。为了统一,我将所有的图片后缀名改为了jpg格式,在windows系统下正常显示,但是到了ubuntu系统下这些暴力更改的图片便无法显示。

  • 试错一:将所有由于暴力更改格式的图片改回png格式。训练时依然读取失败的错误,但是报错信息已经不一致了,因此我断定是由于图片格式导致的错误。

  • 解决方法:写了如下程序利用pillow将图片从png转为jpg格式。

2. 代码

import glob
import os
import shutil
from PIL import Image
# 代码健壮性不足,需要注意以下几个假设。
# 假设一:png图片所在文件夹是存在的,并且文件夹下有图片,且均为png格式
img_old_dir = '/home/sky/mytmp/old'				# .png图片所在文件夹
img_new_dir = '/home/sky/mytmp/new'				# 格式更改后图片所在文件夹
if not os.path.exists(img_new_dir):				# 判断保存图片的文件夹是否存在
    os.makedirs(img_new_dir)					# 若不存在则进行创建
img_old_path_list = glob.glob(img_old_dir+'/*png')	# 读取png图片路径
img_old_path_list.sort()							# 进行按照文件名排序(可不要)
print(img_old_path_list)							# 进行打印

# # # # # # # # # # # # # 暴力更改图片后缀,从jpg改为png格式 # # # # # # # # # # # # # 																				#
# for img_old_path in img_old_path_list:        								#
#     img_name = img_old_path.split('/')[-1]									#
#     print(img_name)															#
#     img_name_first = img_name.split('.')[0]									#
#     img_new_path = os.path.join(img_new_dir, img_name_first+'.png')			#
#     shutil.copyfile(img_old_path, img_new_path)  	# 文件复制					#
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 

'''
利用pillow更改图片格式,从png图片更改为jpg图片
'''
for img_old_path in img_old_path_list:          # 对于每张图片
    img = Image.open(img_old_path)              # 利用pillow打开图片
    img_name = img_old_path.split('/')[-1]		# 图片名
    img_name_first = img_name.split('.')[0]		# 不带后缀的图片名
    img_new_path = os.path.join(img_new_dir, img_name_first+'.jpg')	# 新的图片路径
    if img.mode=='RGBA':						# 判断时候存在RGBA格式的图片
        img = img.convert('RGB')# 如果存在,因为jpg图片不支持Alpha透明通道,需要进行格式删减
    img.save(img_new_path, 'JPEG')				# 保存图片

小镇拾光:如需转载请写明转载地址,如果有问题也欢迎提问,有空的时候我会尽力进行回复。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值