使用ChatGPT快速实现灰度和RGBA图片转换为RGB三通道图片的Python数据清洗demo
Imagenet数据集,由于原始图片有灰度图片、彩色图片和RGBA图片,我们的要求是将灰度图片和4通道图片通过
Image.open(img_path+img_name).convert('RGB')
转换为RGB三通道图片重新保存起来。
文件夹形式为一个数据集MyImagenet,路径为
/home/lihuanyu/code/03AdaBins/img_data/MyImagenet/
,有train,test和val三个文件夹,每个文件夹又有若干的类别子文件夹,子文件夹是每一个类别的图片。
判断图片是否是灰度图片或者RGBA图片(4通道),若是进行
Image.open(img_path+img_name).convert('RGB')
处理转换为RGB三通道图片,否则不进行处理,直接将原图片复制到新文件夹。
最后将遍历的所有图片按照输入的存储形式重新存入
/home/lihuanyu/code/03AdaBins/MyImagenet_process
,MyImagenet_process下也是有train,test和val三个文件夹,每个文件夹又有若干的类别子文件夹,子文件夹是每一个类别的图片。
以python语言形式呈现。
需要打印处理流程:处理到那张图片和处理完成的标志。
import
os
import
shutil
from
PIL
import
Image
img_data_root =
"/home/lihuanyu/code/03AdaBins/img_data/MyImagenet/"
img_processed_root =
"/home/lihuanyu/code/03AdaBins/MyImagenet_process/"
for
mode
in
[
'train'
,
'test'
,
'val'
]:
img_mode_path = os.path.join(img_data_root, mode)
processed_mode_path = os.path.join(img_processed_root, mode)
for
class_name
in
os.listdir(img_mode_path):
img_class_path = os.path.join(img_mode_path, class_name)
processed_class_path = os.path.join(processed_mode_path, class_name)
if
not
os.path.exists(processed_class_path):
os.makedirs(processed_class_path)
for
img_name
in
os.listdir(img_class_path):
img_path = os.path.join(img_class_path, img_name)
processed_img_path = os.path.join(processed_class_path, img_name)
img = Image.
open
(img_path)
if
img.mode ==
"L"
or
img.mode ==
"RGBA"
:
img = img.convert(
'RGB'
)
print
(
"Converting image {}..."
.
format
(img_path))
else
:
shutil.copy(img_path, processed_img_path)
print
(
"Copying image {}..."
.
format
(img_path))
img.save(processed_img_path)
print
(
"Done!"
)
代码可以成功运行
安静到无声
博士研究生 @ 中国石油大学