无法使用正确颜色的 PIL 保存创建的图像

Can't manage to save a created image with PIL with the right color

我有这个功能,可以获取视频,提取帧并将其保存为图像,如果我使用 cv2.write 它可以完美运行(但我无法使其与 py2exe 或Pyinstaller),所以我现在正在尝试 PIL,当我用 PIL 保存框架时,图像颜色错误,通常绿色和红色有蓝色酊剂。

from PIL import Image
# import cv2

def getThumbnail(video):
    cap = cv2.VideoCapture(video)
    cap.set(1, 150)
    ret, frame = cap.read()
    im = Image.fromarray(frame)
    print (im, im.format, "% dx%d" % im.size, im.mode)
    im.save(video.split(".")[0] + '.mp4' +'.jpg', icc_profile=im.info.get('icc_profile'))
    # cv2.imwrite(video.split(".")[0] + '.mp4.jpg', frame)

感谢您的帮助。

添加第二个参数 - "JPEG":

im.save(v_files[i].split(".")[0] + '.mp4.jpg', "JPEG", icc_profile=im.info.get('icc_profile'))

终于!我在以下位置找到了解决方案:http://blog.extramaster.net 问题是 cv2 和 PIL 处理图像编码的方式。

def getThumbnail(video):
    #Image._initialized = 2
    cap = cv2.VideoCapture(video)
    cap.set(1, 150)
    ret, frame = cap.read()
    array = cv2.cvtColor(numpy.array(frame), cv2.COLOR_RGB2BGR)
    im = Image.fromarray(array)
    print (im, im.format, "% dx%d" % im.size, im.mode)
    im.save(video.split(".")[0] + '.mp4' +'.jpg', "JPEG", icc_profile=im.info.get('icc_profile'))

由于我发现的文档很少,所以我将其留在此处,希望它能对某人有所帮助。