无法使用正确颜色的 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'))
由于我发现的文档很少,所以我将其留在此处,希望它能对某人有所帮助。
我有这个功能,可以获取视频,提取帧并将其保存为图像,如果我使用 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'))
由于我发现的文档很少,所以我将其留在此处,希望它能对某人有所帮助。