【问题标题】:Why is PIL's Image.fromarray() distorting my image color? [duplicate]为什么 PIL 的 Image.fromarray() 会扭曲我的图像颜色? [复制]
【发布时间】:2020-09-29 05:58:21
【问题描述】:

我正在使用以下代码为 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,所以读取和蓝色分量被交换了。要么你必须改变字节顺序,要么有一个参数,所以说你有 RGB 还是 BGR
  • 同意@gelonida。 PIL 以正常的 RGB 顺序处理和期望图像。但是 OpenCV 期望并要求它们按照 BGR 的顺序排列。

标签: python opencv image-processing python-imaging-library cv2


【解决方案1】:

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')

【讨论】:

  • 完美,这行得通
猜你喜欢
  • 2023-01-17
  • 2019-03-25
  • 2013-07-26
  • 2018-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-24
  • 1970-01-01
相关资源
最近更新 更多