多语言展示
当前在线:458今日阅读:103今日分享:49

ImageData的奇怪的地方——图片失真

ImageData可以返回图片的像素数据。奇怪的是,用这些像素数据作图,得到的却有可能不是原图。下面,我们就通过几个实验,来看一下这个现象。
工具/原料
1

电脑

2

Mathematica

方法/步骤
1

首先,把某个图片赋值为img,并运行:ImageData[img]

2

数据分析,查看数据的长度:Length[数据]……=365365恰好就是img的宽度,img的像素尺寸是500*365。img前六个像素对应的数据是:数据[[1,1;;6]]

3

用Image把数据变成图片:Image[ImageData[img]]或者Image[数据]这个图片没什么显著变化。

4

用ArrayPlot绘制像素数据的图像,却又是另一番景象:ArrayPlot[数据,Frame->False]

5

用Plot做一个函数图像:Plot[Sin[x],{x,0,2 Pi}]并转化为像素数据。

6

把像素数据转化为图片,并与原图作一番对比。这是不是说明,Plot做出来的图像,在ImageData看来,不是真正的图片?

7

把Plot的图形截图试试。结果还是与原图不太一样。

8

我们如果用Image得出来的图片进行实验,会怎样?结果还是不一样,Image@ImageData存在很严重的失真!

9

不过,用NestList却发现,对Image给出的图像,并不失真!这是怎么个情况?我完全不懂了!

注意事项

Image和ImageData结合使用,怎么才能保持图片的色彩不失真?

推荐信息