workingDir = 'frames';
filename = [sprintf('%d',1) '.jpg'];
fullname = fullfile(workingDir,'imagesV',filename);
a2=imread(fullname);
a2(1,1)=1;
imwrite(a2,fullname);
a1=imread(fullname);
if a1==a2
disp(23)
else
disp(45)
end
The code above displays 45 instead of 23. What is the reason for this?

 Réponse acceptée

Rik
Rik le 30 Mar 2018

0 votes

JPEG is not a lossless compression algorithm. This means that re-writing a loaded image might (and generally will) result in a different image. Another reason in your case would be that you changed a pixel value.
(side note: technically there are versions of JPEG that do support lossless compression, but the support is very limited)

2 commentaires

Walter Roberson
Walter Roberson le 30 Mar 2018
Yup.
You should only use the original JPEG for display purposes, not for data archive, because JPEG lossy mode will blur all straight lines, similar in effect to anti-aliasing.
Walter Roberson
Walter Roberson le 31 Mar 2018
Avoid JPEG, JPEG2000, and (I suppose) GIF. The other formats do not lose information.

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Images dans Centre d'aide et File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by