为什么 PIL 的 Image.fromarray() 会扭曲我的图像颜色?
Why is PIL's Image.fromarray() distorting my image color?
我正在使用以下代码为 mp4 视频生成缩略图:
import cv2 as cv
from PIL import Image
vidcap = cv.VideoCapture(videoPath)
vidcap.set(cv.CAP_PROP_POS_MSEC, millisecond)
#Turn video frame into numpy ndarray
success, image = vidcap.read()
cv.imwrite('fromImage.jpg', image) #line to be replaced
从高预算、专业拍摄的视频中生成的缩略图如下所示:
不幸的是,在我的应用程序上下文中,我无法将图像帧直接写入文件。相反,我必须将 cv 生成的图像数组转换为 PIL 图像,然后从那里开始。它看起来像这样:
# Turn numpy ndarray int PIL image
img = Image.fromarray(image)
img.save('fromArray.jpg') #Saving it for Whosebug
但是从同一个 mp4 视频输出的缩略图完全失真,因为它似乎已经交换了红色和蓝色,看起来像这样:
造成图像失真的罪魁祸首是谁或什么?
https://note.nkmk.me/en/python-opencv-bgr-rgb-cvtcolor/
imageRGB = cv.cvtColor(image, cv.COLOR_BGR2RGB)
img = Image.fromarray(imageRGB)
img.save('fromArray.jpg')
我正在使用以下代码为 mp4 视频生成缩略图:
import cv2 as cv
from PIL import Image
vidcap = cv.VideoCapture(videoPath)
vidcap.set(cv.CAP_PROP_POS_MSEC, millisecond)
#Turn video frame into numpy ndarray
success, image = vidcap.read()
cv.imwrite('fromImage.jpg', image) #line to be replaced
从高预算、专业拍摄的视频中生成的缩略图如下所示:
# Turn numpy ndarray int PIL image
img = Image.fromarray(image)
img.save('fromArray.jpg') #Saving it for Whosebug
但是从同一个 mp4 视频输出的缩略图完全失真,因为它似乎已经交换了红色和蓝色,看起来像这样:
https://note.nkmk.me/en/python-opencv-bgr-rgb-cvtcolor/
imageRGB = cv.cvtColor(image, cv.COLOR_BGR2RGB)
img = Image.fromarray(imageRGB)
img.save('fromArray.jpg')