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?

 採用された回答

Rik
Rik 2018 年 3 月 30 日

0 投票

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 件のコメント

Walter Roberson
Walter Roberson 2018 年 3 月 30 日
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 2018 年 3 月 31 日
Avoid JPEG, JPEG2000, and (I suppose) GIF. The other formats do not lose information.

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

ヘルプ センター および File ExchangeImages についてさらに検索

タグ

Community Treasure Hunt

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

Start Hunting!

Translated by