rgb_image[i, j, :] = np.dot(transform_matrix_inv, ycbcr_image[i, j, :]) - np.dot(transform_matrix_inv, shift_matrix) return rgb_image.astype(np.uint8) 所需要的包以及绘图代码如下,绘图用到的就是上面定义的两个函数。首先将rgb转为ycbcr,在从ycbcr转为rgb: import numpy as np import i...
rgb_img[x, y, :] = np.maximum(0, np.minimum(255, np.round(np.dot(mat_inv, ycbcr_img[x, y, :] - offset) *255.0)))returnrgb_img
下面我们将模式为“RGB”的lena图像转换为“YCbCr”图像。 例子: >>>fromPILimportImage>>> lena =Image.open("D:\\Code\\Python\\test\\img\\lena.jpg")>>> lena_ycbcr =lena.convert("YCbCr")>>>lena_ycbcr.mode'YCbCr'>>>lena_ycbcr.getpixel((0,0)) (132, 97, 173)>>>lena.getpixel((0,...
由此可见,PIL中并非按照这个公式进行“RGB”到“YCbCr”的转换。 转换后的图像lena_ycbcr如下: 模式“I” 模式“I”为32位整型灰色图像,它的每个像素用32个bit表示,0表示黑,255表示白,(0,255)之间的数字表示不同的灰度。在PIL中,从模式“RGB”转换为“I”模式是按照下面的公式转换的: I = R * 299/1000 ...
RGB转YCbCr:因为人眼对亮度比较敏感,而对于色度不那么敏感,所以,我们就先将RGB的数据转换到YCbCr色彩空间,便于下面的处理。 降采样:转到YCbCr色彩空间后,就可以将 Cb 和 Cr 这两个通道进行降采样,这里一般是将 2*2 个像素变为 1*1 个像素,虽然分辨率下降到了四分之一,但对于人眼来说差别是不大的。(这一步...
模式“YCbCr”为24位彩色图像,它的每个像素用24个bit表示。YCbCr其中Y是指亮度分量,Cb指蓝色色度分量,而Cr指红色色度分量。人的肉眼对视频的Y分量更敏感,因此在通过对色度分量进行子采样来减少色度分量后,肉眼将察觉不到的图像质量的变化。 模式“RGB”转换为“YCbCr”的公式如下: ...
彩色转灰度: Gray = R×0.299 + G×0.587 + B×0.114 代码: defgrayscale(img):coef=np.array([[[0.299,0.587,0.114]]])# rgb to gray (YCbCr)gray=np.sum(np.asarray(img)*coef,axis=2)output=np.dstack((gray,gray,gray))returnoutputimg=Image.open('/content/linux-cover.jpeg').resize((400...
转换后的图像lena_ycbcr如下: 模式“I” 模式“I”为32位整型灰色图像,它的每个像素用32个bit表示,0表示黑,255表示白,(0,255)之间的数字表示不同的灰度。在PIL中,从模式“RGB”转换为“I”模式是按照下面的公式转换的: I = R * 299/1000 + G * 587/1000 + B * 114/1000 ...
RGB---(3x8位像素,真彩色) RGBA---(4x8位像素,带透明度掩模的真彩色) CMYK---(4x8位像素,分色) YCbCr---(3x8位像素,彩色视频格式) I---(32位有符号整数像素) F---(32位浮点像素) 详解可参考一个csdn博客:https://blog.csdn.net/icamera0/article/details/50843172...
PIL中有九种不同模式。分别为1,L,P,RGB,RGBA,CMYK,YCbCr,I,F。 原图像: 1、 模式“1”---二值图像 模式“1”为二值图像,非黑即白。但是它每个像素用8个bit表示,0表示黑,255表示白。下面我们将lena图像转换为“1”图像。 2、 模式“L”---灰度图像 ...