批量更改图片格式(png改为rgb)

一、使用labelme进行关键点标注,打开一些图片出现闪退,并报如下错误:

KeyError: 'RGBA'

OSError: cannot write mode RGBA as JPEG

(keypoints) D:\PythonProjects\sources\belly_sources>labelme --labels labels.txt
Traceback (most recent call last):
  File "D:\Anacondas\envs\keypoints\lib\site-packages\PIL\JpegImagePlugin.py", line 630, in _save
    rawmode = RAWMODE[im.mode]
KeyError: 'RGBA'

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "D:\Anacondas\envs\keypoints\lib\site-packages\labelme\app.py", line 1754, in openFile
    self.loadFile(fileName)
  File "D:\Anacondas\envs\keypoints\lib\site-packages\labelme\app.py", line 1518, in loadFile
    self.imageData = LabelFile.load_image_file(filename)
  File "D:\Anacondas\envs\keypoints\lib\site-packages\labelme\label_file.py", line 66, in load_image_file
    image_pil.save(f, format=format)
  File "D:\Anacondas\envs\keypoints\lib\site-packages\PIL\Image.py", line 2353, in save
    save_handler(self, fp, filename)
  File "D:\Anacondas\envs\keypoints\lib\site-packages\PIL\JpegImagePlugin.py", line 632, in _save
    raise OSError(f"cannot write mode {im.mode} as JPEG") from e
OSError: cannot write mode RGBA as JPEG

原因:

闪退发生时打开的图像是四通道RGBA,第四个通道是透明通道,png格式是四通道rgba,jpg格式是三通道rgb。 

png格式的不只是文件名后缀是 .png ,也可能是后缀名是 .jpg, 但是图片里面的深度是为32的,常规的后缀是 .jpg 格式的图片一般深度是为24的。

二、更改格式的代码

# 批量更改图片格式
from PIL import Image
import os

path_in = 'D:/PythonProjects/sources/belly_sources/test'
file_in = os.listdir(path_in)
num_file_in = len(file_in)

for i in range(0,num_file_in):
    # 取决于自己的图片命名方式
    t = i+534
    img = Image.open(f"D:/PythonProjects/sources/belly_sources/test/{t}.jpg")
    print(img.mode)
    if img.mode == "RGBA":img = img.convert('RGB')
    img.save(f"D:/PythonProjects/sources/belly_sources/test/{t}.jpg")

三、相关参考 

OSError: cannot write mode RGBA as JPEG解决办法_AKxiaokui的博客-CSDN博客

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值