Python 为什么是PIL';s Image.fromarray()是否扭曲了我的图像颜色?

Python 为什么是PIL';s Image.fromarray()是否扭曲了我的图像颜色?,python,opencv,image-processing,python-imaging-library,cv2,Python,Opencv,Image Processing,Python Imaging Library,Cv2,我正在使用以下代码为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)

我正在使用以下代码为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 stackoverflow
但从同一mp4视频输出的缩略图完全失真,因为它似乎已切换为红色和蓝色,如下所示: 谁或什么是造成图像失真的罪魁祸首?


同样的问题似乎是,RGB被解释为BGR,所以读取和蓝色组件被交换。要么您必须更改字节顺序,要么有一个参数,说明您是否有带有@gelonida的RGB或BGRAgree。PIL以正常的RGB顺序处理和期望图像。但OpenCV期望并要求它们符合BGR的顺序。完美,这是可行的
imageRGB = cv.cvtColor(image, cv.COLOR_BGR2RGB)

img = Image.fromarray(imageRGB)

img.save('fromArray.jpg')