没有从RGB到YUV的转换

时间:2016-06-02 09:38:23

标签: python python-imaging-library rgb yuv

我无法在任何Python库(最好是PIL)中找到一个易于使用的函数,用于从RGB转换为YUV。 由于我必须转换许多图像,我不想自己实现它(没有LUT就会很昂贵等等)。

当我做直观的时候:

from PIL import Image
img = Image.open('test.jpeg')
img_yuv = img.convert('YUV')

我收到错误:

ValueError: conversion from RGB to YUV not supported

你知道为什么会这样吗? 在python甚至PIL中是否有任何有效的实现?

我不是计算机视觉专家,但我认为这种情况在大多数图书馆都是标准的......

谢谢,

罗马

4 个答案:

答案 0 :(得分:4)

你可以试试这个:

import cv2
img_yuv = cv2.cvtColor(img, cv2.COLOR_BGR2YUV)

答案 1 :(得分:2)

您可以尝试'YCbCr'而不是'YUV',即

from PIL import Image
img = Image.open('test.jpeg')
img_yuv = img.convert('YCbCr')

答案 2 :(得分:2)

如果您不想安装任何其他软件包,可以查看skimage source code。以下代码片段取自该github页面,并进行了一些小的更改:

# Conversion matrix from rgb to yuv, transpose matrix is used to convert from yuv to rgb
yuv_from_rgb = np.array([[ 0.299     ,  0.587     ,  0.114      ],
                     [-0.14714119, -0.28886916,  0.43601035 ],
                     [ 0.61497538, -0.51496512, -0.10001026 ]])

# Optional. The next two line can be ignored if the image is already in normalized numpy array.
# convert image array to numpy array and normalize it from 0-255 to 0-1 range
new_img = np.asanyarray(your_img)
new_img = dtype.img_as_float(new_img)

# do conversion
yuv_img = new_img.dot(yuv_from_rgb.T.copy())

答案 3 :(得分:1)

我知道可能会迟到,但scikit-image的功能为rgb2yuv

from PIL import Image
from skimage.color import rgb2yuv

img = Image.open('test.jpeg')
img_yuv = rgb2yuv(img)