导读
过几天就是清明节了,作为传统节日,特别是一个有放假的传统节日,我觉得有必要安排一下。正好赶上买了贾志刚老师(opencv学堂)的课程听了几天的音频,正好可以把上面的知识点拿来分享。——关于查找表以及滤镜的实现
微信公众号:AI算法与图像处理如果你觉得对你有帮助,分享和转发
一 清明节简介
清明节,又称踏青节、行清节、三月节、祭祖节,节期在仲春与暮春之交。清明兼具自然与人文两大内涵,既是自然节气点,也是传统节日。清明节是传统的重大春祭节日,扫墓祭祀、缅怀祖先,是中华民族数千年以来的优良传统,不仅有利于弘扬孝道亲情、唤醒家族共同记忆,还可促进家族成员乃至民族的凝聚力和认同感。清明节融汇自然节气与人文风俗为一体,是天时地利人和的合一,充分体现了中华民族先祖们追求“天、地、人”的和谐合一,讲究顺应天时地宜、遵循自然规律的思想。清明节的节俗丰富,扫墓祭祖与踏青郊游是清明节的两大礼俗主题,这两大传统礼俗主题在中国自古传承,至今不辍。
——嗯,没错,百度百科说的
二 清明上河图
说起“清明节”,我想大家一定会想到《清明上河图》,但是我一百度,其实“清明节”和《清明上河图》是无关的,具体的可以去百度了解一哈。
清明上河图,中国十大传世名画之一。为北宋风俗画,北宋画家张择端仅见的存世精品,属国宝级文物,现藏于北京故宫博物院。
三 LUT介绍——查找表
LUT(look up table)基本思想是查表,既将矩阵中所有可能遇到的值都计算一遍储存在数组中,在遍历过程中只是将对应的查表值进行赋值即可,这样可以避免大量的重复计算,这是典型的使用存储空间换取速度的做法。
例如以下图展示了一个查找表实现将低对比度的图转变为高对比度的原理图:
典型应用:滤镜,利用LUT转换成不同效果的图像
原图
加滤镜后的效果图
四 滤镜原理
我们都知道常见的色彩空间有RGB、CMY、HSV等等,其中最经常用到的当属RGB了,当然这些色彩空间之间是可以互相转换的。
而滤镜实际上就是通过对RGB三个通道的值进行一定的运算得到一个新的值,然后再显示出来。,其他通道的值保持不变。
五 代码实现
为了让大家能够重现效果并理解底层的原理,这里使用了三种方法进行实现分别如下所示:本人所用的环境:python3.6
所需要的导入的库:(1) cv2 (2) numpy (3) PIL
(1)对图像的三个通道亮度值进行直接修改的方法实现——实现“流年”滤镜效果
思路:
- 以RGB格式读入图片
- 将 R 通道的值提取出来并进行运算用im1存储(图像的矩阵*[1.0,0,0]让另外两个通道的值变成0),同理另外两个通道的值用im2存储
- 最后将im1和im2相加,并转换一下可以显示的格式即可
原图
“流年”效果图
(2)利用opencv中的函数实现
opencv中可以直接调用:
如下所示:可以将cv2.COLORMAP替换为下面的英文单词或者对应的数字皆可
cool风格的清明上河图
(3)利用PIL中函数实现
PIL中通过调用filter函数,参数传递ImageFilter下的滤镜参数即可实现各种滤镜效果的图案
浮雕效果的清明上河图
完整代码:https://github.com/SCUTPZW/opencv/blob/master/LUT_qm
六 总结
- 清明将至,学一下传统的文化
- 了解LUT(look up table 查找表)和滤镜的原理
- 通过对图片的三个通道值进行改变和利用opencv和PIL的函数三种方法实现不同的滤镜效果
— END —