屏幕里的玄机,看完涨知识了

在上一篇文章里,旗姐姐介绍了 图片是怎么存储在电脑里的,主要的内容有这些:

图片是按照像素存储的,一幅图片里面含有的像素越多,图片就越清晰。

像素的每一个属性叫做一个通道。常见的图片有单通道的黑白图片,三通道的不透明彩色图片和四通道的彩色半透明图片。

今天,旗姐姐来给大家讲一下图像是怎样显示的以及如何用python处理图像

1

图像是如何显示的?

无论是手机还是电脑,他们的屏幕都是由一个个“工作单元”组成的,为了统一起见,我们也把它们叫做“像素”。所以说,屏幕也是由像素构成的

如图是电视屏幕的放大图。可以看到,电视屏幕是由很多像素构成的,每个像素里面有红绿蓝三种颜色的发光体,当这三种颜色的发光体按照给定的比例发光的时候,就可以混合出此处像素的颜色啦。

一幅图像横向和纵向被分割成多少个像素,就叫这幅图像的分辨率。同样,一块屏幕横向和纵向由多少像素,就叫做屏幕的分辨率。

高分辨率的屏幕可以显示低分辨率的图像,屏幕分辨率调节可以在电脑的桌面 点击右键->显示设置->分辨率 里面找到。

这里的推荐分辨率和最高分辨率都是 1366 x 768,这说明旗姐姐的屏幕分辨率就是1366 x 768。也就是说旗姐姐的电脑屏幕是由1366 x 768个像素组成的。

现在比较常见的宽屏显示器,分辨率大概是 1920 x 1080 (不信的话大家可以回去查一下),现在很多智能手机的屏幕分辨率也是这个。人们常说的1080p,就是1080像素高,也就是1920 x 1080像素的代称。这个尺寸的图像和视频,对于人眼来说已经非常清晰了,所以现在1080p就代表着“高清”。很显然,旗姐姐的电脑是无法做到完全显示这些像素点的。

但是同时,由于像素越多,需要存储的数据就越多,对应的图片文件和视频文件就越大。因此1080p的视频不是十分常见。此外,如果你有一个分辨率更高的屏幕,播放低分辨率的视频也不会很清晰。所以旗姐姐的电脑在一般的情况下也是不会影响观影体验的,大家不要吐槽这个电脑是辣鸡。

2

像素密度 DPI(PPI)

说到这里大家可能会问,手机屏幕和电脑屏幕都是1920 x 1080像素的,为什么电脑的屏幕那么大,手机的屏幕那么小呢?

之前我们说过,一个像素点的大小是不确定的,那么DPI(或者PPI)就是“一个像素在实际显示出来有多大”的单位。DPI(dots per inch 点每英寸)和PPI(pixels per inch)在电子屏幕上可以看成是同一个单位,它们表示的都是“每英寸包含了多少个像素点”。

我们知道,电子屏幕上的像素实际上是一个个的小型发光体,而PPI就是用来具体衡量这些发光体(或者说像素)的大小的。比如电脑的屏幕是96ppi的,说明在电脑屏幕上每英寸的距离包含了96个像素点

在生活中,屏幕的像素密度并不是越大越好,而是要视观看者距离屏幕的远近确定。比如led的电子屏,像素密度很低,每个像素点超级大。但是由于我们观看的时候距离很远,我们也可以识别出屏幕上的内容。

手机的像素密度大概在330PPI~450PPI之间,这是由于我们使用手机的时候距离屏幕很近,从而手机上的像素必须特别细密,让我们难以看出。电脑的像素密度大约是70PPI~100PPI,在我们正常使用的距离内就很难分辨出电脑上面的像素点了。

如果大家足够勇敢,可以尝试着按照使用手机的距离去观看电脑屏幕或者LED电子屏,这个时候大家就可以清楚地认识到像素的存在啦~

有的时候,我们也会说手机的摄像头是xx像素的,这是在说摄像头拍摄出来的图片的分辨率,也就是说手机摄像头拍摄出来的照片最高可以达到这些像素。

我们计算一下手机屏幕的分辨率就可以发现,整个手机屏幕上有1920x1080=2073600个像素点,就是大约200万像素。所以即使大家的手机摄像头像素高于200万,用它拍出一张分辨率高于200万像素的照片,不放大照片的情况下,在大家的手机屏幕上面也只能显示200万像素

那为什么我用前后两千万的摄像头,拍照依然很模糊呢?

你手抖了

我用三脚架拍的。。。

你对焦没对准

综上所述,摄影是一门高深的学问,照片是否清晰漂亮也和我们的拍照水平有很大关系,摄像头的分辨率只是一部分因素。

3

图像的python交易

通过前面的科普,大家已经知道图片是按像素存储的,每个像素根据图片通道数的不同 可以表示成几个0~255之间的数。所以在代码中,图像就是一个大小为 长x宽x通道数 的数组,对图像进行处理就是修改图片对应的数组

在python里面进行图像处理,我们需要用到两个库,一个是PIL库,用于读取和保存图像,另一个是numpy库,用于处理矩阵

用这两个库打开和保存图片的方法已经在这里给出啦,现在我们就实际操作一下,对图片做一些简单的处理。

先放一张我们用来练手的图片,萌萌哒炮姐

图片反色

图片里面的颜色是由3个0-255之间的整数来表示的,想要把图片的颜色反过来,就是把数组里面的每一个数替换成255减去它本身得到的数,从而把每个像素的颜色变成它们的相反色。

(大家有兴趣的话也可以试试单独把某个通道取反,其它不变,看看是什么效果)

反色的炮姐

图片转黑白

RGB三种颜色按照等比例混合的时候,呈现出来的就是灰色。因此想要把彩色图片转化成黑白的,只要把图片里面的每个通道都修改成全部三个通道的平均值就可以啦。随便提到,用来表示颜色的是0-255之间的整数,所以平均之后别忘了四舍五入到整数哟。

(在python里面,取平均值之后得到的是一个单通道的图片,如果大家想把这幅图片储存成jpg格式的话,要把它转换成三通道的哦)

黑白的炮姐

提取通道

想要提取图片的某个通道,就是把其它通道都赋值为0。不过在这里要小心,python是一门“从零开始”的编程语言,所以我们要小心,三个通道对应的数组下标分别是0,1和2。

红色通道下的炮姐

相关的代码如下,大家也可以自行发挥,用各种方法把炮姐玩坏

如果大家对这两个东西有兴趣,想要了解更多信息,可以参阅

PIL库:http://effbot.org/imagingbook/

numpy库:https://docs.scipy.org/doc/numpy/

这两个网址里面都是全英文的文档,还没有新手教程,相信不会有人真的感兴趣,把它们放在这里就是摆个样子。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180807G1RAJU00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券