Python 为什么是PIL';s Image.fromarray()是否扭曲了我的图像颜色?
我正在使用以下代码为mp4视频生成缩略图: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)
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')