Не обращайте внимания на этот бит и посмотрите ниже на ПРАВКА:
Я не понимаю, почему вы используете fread
? Почему бы не использовать imread
,
что значит не для чтения изображений? Используя этот печально известный оригинал
image , в качестве основы для моего тестового скрипта я мог бы отобразить YCbCr
изображение, как показано в небольшом скрипте ниже.
original = imread("lenna.jpg");
% figure, imshow(original); % if you want to see how the original image looks
YCbCr_version = rgb2ycbcr(original);
% figure, imshow(YCbCr_version); % if you want to see how the YCbCr image looks
imwrite(YCbCr_version, "out.jpg");
YCbCr_fromFile = imread("out.jpg");
figure, imshow(YCbCr_fromFile);
EDIT:
- ЕСЛИ у вас есть бинарная версия файла, и вы можете только прочитать ее, используя
fread
,
тогда должен работать следующий скрипт,
clc;
clear;
close all;
original = imread("lenna.jpg");
% figure, imshow(original); % if you want to see how the original image looks
YCbCr_version = rgb2ycbcr(original);
% figure, imshow(YCbCr_version); % if you want to see how the YCbCr image looks
fileID = fopen('out.bin','w');
fwrite(fileID, YCbCr_version, 'uint8');
fclose(fileID);
fileID = fopen('out.bin','r');
fromFile = fread(fileID, 512*600*3, 'uint8=>uint8');
fclose(fileID);
image = reshape(fromFile, 512, 600, 3);
imagesc(image)
Дело в том, что в операции чтения вы должны также указать 3 канала в умножителе, поскольку цветные изображения имеют это 3-е измерение, то есть 512*600*3
. Если вы дадите 512*600
, как вы делали, у вас не будет информации о цвете. Также необходимо изменить функцию изменения формы, чтобы учесть 3-е измерение. Следовательно, reshape(fromFile, 512,600, 3)
.
- Версия YCbCr, загруженная из файла
![YCbCr version loaded from the file](https://i.stack.imgur.com/2QNDQ.jpg)