一、使用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博客