Matplotlib中图像的尺寸和分辨率
上一篇详细讨论了显示器的尺寸、分辨率,PPI,DPI的概念,在这个基础上,我们讨论图像的尺寸和分辨率就要容易得多了,如果你还没有阅读上一篇,而对这些概念又不是非常、非常地清晰,建议你先阅读上一篇。
先做一个小调查:
matplotlib 绘图,使用下面的命令创建的figure尺寸和分辨率是多少:
import matplotlib.pyplot as pltfiga = plt.figure()
非常清晰的,请在评论区回复1,似乎知道但不是很清晰的回复0.5,根本不知道或者根本没想过这个问题的回复0。
谢谢!你的回复对我后面的写作有重要的参考价值。
图像image和图形graphic
前面有约:用图像image表示位图、栅格图形;用graphic表示矢量图形。
将一个区域(常见的为矩形,后面就以矩形为例)划分为若干个小格子(栅格),每个格子只能用一种颜色填充,将所有格子填上各种颜色,用这种方式表达的图像就是栅格图像Image。
即使整个图像只有一根直线,这根直线也是用一个一个的小格子排列而成的。
![2efa72e6d8bcd9d0fc011436e45b33a5.png](https://img-blog.csdnimg.cn/img_convert/2efa72e6d8bcd9d0fc011436e45b33a5.png)
图一:原图
如果你需要文章中用到的一些素材,如图片、代码、数据集等,请移步QQ群“Python草堂”群号:457079928 下载。
在PS中打开上图,放大到1600%:
![cb2d41a9a9c8f0239bc84dd6a46d6fe1.png](https://img-blog.csdnimg.cn/img_convert/cb2d41a9a9c8f0239bc84dd6a46d6fe1.png)
图二:放大图
就能直观地理解栅格图像的含义了。
graphic,矢量图形,则是用数据语言描述的图形,比如,直线只需要给出两个端点;圆只需要给出圆心和半径即可。
matplotlib在绘制时,绘制的是矢量图形。在存储、交换、使用时大多数又是栅格图像了!
图像大小
在PS里查看图像大小:
![5ee0369deb52e6b60183702731079e90.png](https://img-blog.csdnimg.cn/img_convert/5ee0369deb52e6b60183702731079e90.png)
发现PS有两种表示图像大小的方式:
- 像素大小: 宽度,250 像素;高度344 像素
- 文档大小:宽度,2.12 厘米;高度2.91厘米;分辨率R(resolution) ,300 像素/英寸
注意,这里的文档大小,其实就是图像的物理尺寸,如果我们按照100%的比例打印这幅图像,打印出来的照片区域就是 2.12厘米*2.91厘米。
这两种尺寸的关系如下:
![bd247c0b792eeb3df658fb232b5e8c02.png](https://img-blog.csdnimg.cn/img_convert/bd247c0b792eeb3df658fb232b5e8c02.png)
在上一篇中讲过,像素 pixels 严格来说是显示分辨率。
在计算机屏幕上,1 px,传递到我们眼睛,给出的直观大小是可变的,这就是图像的缩放。
图一中我们的眼睛无法区分出 1 px的格子,当放大到1600%时,我们的眼睛能清晰地区分出 1 px的单元格。
请注意:这时候,图一的实际尺寸、图像分辨率并没有变化;我们改变的是它的显示分辨率。
图像分辨率和显示分辨率
为什么说是改变了图像的显示分辨率呢?
我的电脑显示屏幕的当前显示分辨率已设置好,是1920px*1080px,96DPI,也就是说每英寸长度上能显示96个px。
请问:图一在PS中以100%的比例显示时,占据我的屏幕的物理空间是多大?
图一的尺寸如下:
- 像素大小: 宽度,250 像素;高度344 像素
- 文档大小:宽度,2.12 厘米;高度2.91厘米;分辨率R(resolution) ,300 像素/英寸
我们先来做一个推算:
![a16772c5fba53c36814c60f0706d23fe.png](https://img-blog.csdnimg.cn/img_convert/a16772c5fba53c36814c60f0706d23fe.png)
可以计算出该图像在我的屏幕上应该占据:
![8618bb405cf4f62144c9b0142d9346cb.png](https://img-blog.csdnimg.cn/img_convert/8618bb405cf4f62144c9b0142d9346cb.png)
宽6.625厘米,高9.09厘米的屏幕空间。
原图像的物理尺寸是:2.12厘米*2.91厘米,100%比例显示时真会占据这么大的空间吗?
回到PS中,按照100%比例显示图一,设置PS的标尺单位为毫米,并显示网格线。
![ce0d03c0436e033d7ff43460f47ee1c6.png](https://img-blog.csdnimg.cn/img_convert/ce0d03c0436e033d7ff43460f47ee1c6.png)
我用尺子测量了一下图一100%比例显示时,在我的屏幕上占据的空间就是:6.6厘米*9.1厘米。
再问:在我的屏幕上,如果图一占据的屏幕物理空间和图一的物理尺寸一样,即2.12厘米*2.91厘米,显示的缩放比例应该是多少?
有兴趣的,请在评论里写上你的答案。
总结:
- image的物理尺寸,就是你以100%的比例打印图像时,打印出的照片的物理尺寸。
- image的尺寸有两种表示方式:像素,inches(或厘米、毫米等长度单位);
- 用像素表示的图像尺寸结合DPI可以计算出图像的物理尺寸;
- image有图像分辨率(设定后是固定的)和显示分辨之分;
- image在屏幕上的放大和缩小,改变的是图像的显示分辨率;image的实际分辨并没有改变;
- image是将图像区域划分为方格矩阵,每个方格填充各种色彩来表达图像的。
栅格矩阵表达图像的方式,让用Numpy的ndarray来存储、交换、重现、变换image成为很自然的事。
关注头条号”Python草堂“,轻松阅读下一篇:matplotlib 应知应会的用numpy存储、交换、修改图像。
相关代码、图像、数据资源请移步“Python草堂”群457079928下载。
![8c5f030d838a5dbd349ae110cc3f6225.png](https://img-blog.csdnimg.cn/img_convert/8c5f030d838a5dbd349ae110cc3f6225.png)
你的评论和赞是我前进的动力哟!