Unexpected behaviour by imread and imwrite

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?

 Risposta accettata

Rik
Rik il 30 Mar 2018
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 Commenti

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.
Avoid JPEG, JPEG2000, and (I suppose) GIF. The other formats do not lose information.

Accedi per commentare.

Più risposte (0)

Categorie

Scopri di più su Images in Centro assistenza e File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by