问题
I am generating thumbnails for mp4 videos using the following code:
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
The thumbnail generated from a high budget, professionally shot video looks like this: Unfortunately in my application context, I will not be able to write the image frame directly to a file. Instead I must convert the image array generated by cv into a PIL image and then go from there. It looks something like this:
# Turn numpy ndarray int PIL image
img = Image.fromarray(image)
img.save('fromArray.jpg') #Saving it for stackoverflow
But the outputted thumbnail from the same mp4 video is completely distorted as it seems to have swapped red and blue and looks like this: Who or what is the culprit in this image distortion?
回答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')
来源:https://stackoverflow.com/questions/62293077/why-is-pils-image-fromarray-distorting-my-image-color