我在matlab R2013a中使用函数rgb2ycbcr
将RGB更改为YCBCR颜色空间。并且我将YCBCR的每个通道保存为jpeg图像。然后我读取了jpeg图像,例如CB通道,但我发现jpeg图像中的像素值与保存之前的通道CB不同。为什么会这样?这是我的代码:
I = imread('pic.jpg'); % // 'pic.jpg' is an unin8 rgb image
YCBCR = rgb2ycbcr(I);
Y = YCBCR(:,:,1);
CB = YCBCR(:,:,2);
CR = YCBCR(:,:,3);
imwrite(Y,'F:\CASIA V1.0\Y.jpg','jpg');
imwrite(CB,'F:\CASIA V1.0\CB.jpg','jpg');
imwrite(CR,'F:\CASIA V1.0\CR.jpg','jpg');
然后我读了CB.jpg
,我发现像素值与YCBCR(:,:,2)
中的像素值不同。我的代码有什么问题吗?如果有人能回答我的问题,我将非常感激。
答案 0 :(得分:2)
当您使用imwrite将图像存储为jpg时,它会在将图像保存到文件之前对图像运行jpeg压缩。默认情况下,压缩质量设置为原始的75%。我猜这是一些像素值从未压缩图像变为压缩图像的原因。