视频时间帧中显示的图像颜色错误
Displayed image from a time frame of a video has the wrong color
我试图提取视频的时间帧,并将其显示为图像 (JPEG)。但不幸的是,使用 PIL.Image.fromarray() 显示的图像比预期的更蓝。棘手的部分是,当我先保存它(使用 cv2.imwrite)并使用 PIL.Image.open() 打开该新文件时,图像具有正确的颜色。
我以为它与RGB数组组成有关,但后来我检查了一下,两个数组(直接来自帧和来自Image.open())完全相同。
我可以做些什么来显示正确的图像而不事先将其保存为外部文件吗?
谢谢。
def TimeFrame(file, tf):
capture = cv2.VideoCapture(file)
frameCount = int(capture.get(cv2.CAP_PROP_FRAME_COUNT))
capture.set(cv2.CAP_PROP_POS_FRAMES, tf)
_, frame = capture.read()
directTF = Image.fromarray(frame)
cv2.imwrite("12345678999.jpg", frame)
image = Image.open("12345678999.jpg")
注意:file 是视频的名称,tf 是您要从中提取图像的特定时间范围。
OpenCV 使用 BGR 作为图像的默认颜色顺序
显示前使用cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
OpenCV 使用 BGR,PIL 使用 RGB。
你可能想试试
directTF = Image.fromarray(cv2.cvtColor(frame, cv2.COLOR_BGR2RGB))
让 OpenCV 在您要求 PIL 读取数组之前翻转这些通道。
我试图提取视频的时间帧,并将其显示为图像 (JPEG)。但不幸的是,使用 PIL.Image.fromarray() 显示的图像比预期的更蓝。棘手的部分是,当我先保存它(使用 cv2.imwrite)并使用 PIL.Image.open() 打开该新文件时,图像具有正确的颜色。
我以为它与RGB数组组成有关,但后来我检查了一下,两个数组(直接来自帧和来自Image.open())完全相同。
我可以做些什么来显示正确的图像而不事先将其保存为外部文件吗?
谢谢。
def TimeFrame(file, tf):
capture = cv2.VideoCapture(file)
frameCount = int(capture.get(cv2.CAP_PROP_FRAME_COUNT))
capture.set(cv2.CAP_PROP_POS_FRAMES, tf)
_, frame = capture.read()
directTF = Image.fromarray(frame)
cv2.imwrite("12345678999.jpg", frame)
image = Image.open("12345678999.jpg")
注意:file 是视频的名称,tf 是您要从中提取图像的特定时间范围。
OpenCV 使用 BGR 作为图像的默认颜色顺序
显示前使用cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
OpenCV 使用 BGR,PIL 使用 RGB。
你可能想试试
directTF = Image.fromarray(cv2.cvtColor(frame, cv2.COLOR_BGR2RGB))
让 OpenCV 在您要求 PIL 读取数组之前翻转这些通道。