首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

摄影?Python?这可能是最客观的照片解读方式

【投稿】ID:LIMA

超纲申明:本文包含大量python 以及 matplotlib代码

事情的起因是这样的,在学习调色的是时候,总觉得自己的照片颜色发灰,跟500px上大神的作品差点意思,于是准备系统的分析一下数据~

像直方图、波形图、矢量示波器之类的就是很好的分析工具。

很遗憾的是PS内部只有直方图这个功能,像矢量示波器之类的多数得用插件,并且需要一张图一张图拖进去看,比较麻烦。

我看图还有个习惯,希望能有大量的图一起看,于是决定用python写个小工具,事实上效果相当不错。

可以实现直方图、矢量示波器等分析工具的图表展示,对照片影调有更加直观深入的了解。

不过这个工具主要是用来浏览,可以对一个文件夹里的照片批量生成拼在一起的分析图表,追色找思路的时候很好使。

对于调色的具体操作,还是需要用到PS及其各种插件,不可越俎代庖。

多说一句,摄影审美还是需要多看多感受,主观成分占主导,客观的量化分析只能起辅助作用,难以面面俱到,通过某几个参数来真正量化照片的好坏多少有些勉强。

提示:以下为编程内容,运行代码需要搭建Python编程环境,感兴趣的小伙伴可以自行尝试,完整的代码文件和代码运行视频教程也会打包分享给大家~

「明度直方图」

既然主要目标是分析影调,那么明度直方图是必不可少的。明度直方图的绘制相当简单,只需通过公式——

L = R ∗ 299/1000 + G ∗ 587/1000 + B ∗ 114/1000

求出所有像素的明度,然后再生成直方图就可以了。

需要注意的是这里的L其实是指Luminance或Luma,对应于YUV颜色空间。

需要和HSB/HSV颜色空间的Brightness/Value;HSL颜色空间的Lightness;以及Lab颜色空间的Lightness区分开。

生成代码:

「矢量示波器」

矢量示波器显示的是极坐标矢量图形,矢量的幅度代表色度信号的幅度,即饱和度;相角代表色度信号的相位,即色相。

矢量示波器很好的显示了照片在某个色相上的峰值,即主色调;以及这个颜色对应的饱和度。

比如这张示例图,整张图的色调都是统一的黄色,但是饱和度不高,显得单调又带着些许沉闷。

生成代码绘制外面的色环:

绘制矢量示波器:

同样还可以绘制一张色相与Brightness关系的图(右图):

「波形图」

最右边的几个空位给了波形图。波形图与直方图以及示波器最大的区别在于波形图包含了空间信息!示波器以及直方图仅仅提供了图片的统计信息,但是重要的位置信息却被省略了。

波形图则引入了位置信息,可以观察照片不同位置的影调、对比度,以及色调。其横轴是照片的宽度,纵轴是照片这一列像素所对应的明暗/颜色分布。

以这张图为例,上半部分代表高光,下半部分代表阴影,上下两部分落差大,说明反差大,可以看出照片确实有强烈的明暗对比。

下面的RGB分量波形图可以看出上半部分红色更亮一些,说明亮部偏暖;但是下半部分基本混在一起,则与照片暗部死黑相符合。

生成代码:

RGB通道的同样如此,L换成相应的通道即可:

更多的一些展示~

其他一些代码的细节:绘制图表运用了大量matplotlib图表。

另外多张子图很适合使用grid函数来规定子图的排列关系:

然后使用argparse模块来处理命令行参数,对路径下的图片进行批量处理。

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

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券