Color Lookup Table

在影像处理领域中,当我们想要调整一个影像的色彩时,经常会用到 Color Lookup Table 的技术。

举个简单的例子,如果我们想要让影像中的每个像素的R值变为原本的0.3倍,最基本的做法就是把每一个像素的R值乘以0.3,假设像素的大小为1000X1000,那么总共要1000000次浮点运算。

如果我们一开始先创建一张表,把所有颜色值经过处理(R值变为0.3倍)之后的结果记录起来,然后把每个像素的色彩拿去查表,得到处理之后的色彩值,那么我们只要做1000000次查表操作,会比浮点运算快很多。实际上大部分色彩调整的算法都比这个例子复杂许多,因此更能凸显出查表法的高效率。

所以什么是 Color Lookup Table 呢,顾名思义,就是一张颜色映射表,也就是基准图,用于查询一个像素需要映射的颜色值。不过如果要把所有色彩的处理结果都存起来,那这张表势必会相当大。以 RGB 24 bits 为例,每个像素占3 bytes,而总共会有16777216(256X256X256)种色彩,总共占48MB(256X256X256X3 bytes),看来并不小。因此实际上我们并不会记下所有的色彩,而是只记下部分的色彩,其他不在表内的色彩则用内插值取得处理后的结果。

当然了,由于基准图的特性,这种方式只能进行颜色上的调整(曲线,色彩平衡等),其他效果调整也只限于利用图层间混合模式的更改,例如可做暗角、漏光等效果。


接下来,我们一步步来看怎么制作一个自己的滤镜。

我们主要讲iOS的制作流程,android也是类似的。

一、在GPUImage框架中找到lookup.png这张图,图的大小是512X512,也就是64X64X64。

二、打开Photoshop,选取一张原始图。

三、为这张图创建一个组,调一下颜色。

四、现在我们效果调好了,我们需要把效果应用到步骤一中的基准图,我们会得到一张新的基准图。

五、接下来就借用GPUImage框架中的GPUImageLookupFilter来实现我们的效果吧。

总结:从Demo最终的效果来看,与我们之前在Photoshop处理出来的效果几乎是一样的。

最后我们一起简单分析一下GPUImageLookupFilter中的脚本。

 

IOS 中openGL使用(使用基准图快速制作滤镜)的更多相关文章

  1. IOS 中openGL使用教程2(openGL ES 入门篇 | 绘制一个多边形)

    在上一篇我们学习了如何搭建IOS下openGL的开发环境,接下来我们来学习如何绘制一个多边形. 在2.0之前,es的渲染采用的是固定管线,何为固定管线,就是一套固定的模板流程,局部坐标变换 -> ...

  2. gif动图快速制作方法(附工具)

    现在写博客或是wiki的过程中,会经常引用到图片,特别是客户端经常与页面相关所以截图不可避.但是越来越多的效果仅仅一张图片是无法清楚的描述.并且博客或是wiki也是支持gif图的.gif图的制作方法有 ...

  3. gif动图快速制作方法(附工具)(转)

    现在写博客或是wiki的过程中,会经常引用到图片,特别是客户端经常与页面相关所以截图不可避.但是越来越多的效果仅仅一张图片是无法清楚的描述.并且博客或是wiki也是支持gif图的.gif图的制作方法有 ...

  4. IOS 中openGL使用教程3(openGL ES 入门篇 | 纹理贴图(texture)使用)

    在这篇文章中,我们将学习如何在openGL中使用纹理贴图. penGL中纹理可以分为1D,2D和3D纹理,我们在绑定纹理对象的时候需要指定纹理的种类.由于本文将以一张图片为例,因此我们为我们的纹理对象 ...

  5. iOS 中OpenGL ES 优化 笔记 1

    1,避免同步和Flushing操作 OpenGL ES的命令执行通常是在command buffer中积累一定量的命令后,再做批处理执行,这样效率会更高:但是一些OpenGL ES命令必须flush ...

  6. IOS 中openGL使用教程1(openGL ES 入门篇 | 搭建openGL环境)

    OpenGL版本 iOS系统默认支持OpenGl ES1.0.ES2.0以及ES3.0 3个版本,三者之间并不是简单的版本升级,设计理念甚至完全不同,在开发OpenGL项目前,需要根据业务需求选择合适 ...

  7. IOS 中openGL使用教程4(openGL ES 入门篇 | 离屏渲染)

    通常情况下,我们使用openGL将渲染好的图片绘制到屏幕上,但有时候我们不想显示处理结果,这时候就需要使用离屏渲染了. 正常情况下,我们将屏幕,也就是一个CAEAGLLayer对象作为渲染目标,离屏渲 ...

  8. iOS 中使用.9图

    背景 .9图来源于Android.为了设计出一套图,兼容Android和iOS,使用.9图的方式来对图片进行拉伸以适应不同的屏幕.在iOS中没有.9图的概念,只能先了解Android的.9图再进行模拟 ...

  9. 解决iOS中 tabBarItem设置图片(image+title切图在一起)时造成的图片向上偏移

    解决iOS中 tabBarItem设置图片(image+title切图在一起)时造成的图片向上偏移 解决办法1:设置tabBarItem的imageInsets属性 代码示例: childContro ...

随机推荐

  1. PHP获取图片颜色值

    PHP获取图片颜色值,检测图片主要颜色的代码: <?php $i=imagecreatefromjpeg("photo3.jpg");//测试图片,自己定义一个,注意路径 f ...

  2. box-sizing

    Over the generations, people realized that math is not fun, so a new CSS property called box-sizing ...

  3. 常用的JavaScript字符串处理函数及用法

    最近参加了几次前端实习生招聘的笔试,发现很多笔试题都会考到字符串的处理,比方说去哪儿网笔试题.淘宝的笔试题等,如果你经常参加笔试或者也是一个过来人,相信你也跟我一样,发现字符串的处理是前端招聘过程中最 ...

  4. 获取打开文件的PID

    var SI : TStartupInfo; PI : TProcessInformation; pid:DWORD; begin ZeroMemory(@SI, SizeOf(SI)); //Zer ...

  5. 负载均衡 Lvs nat 模式笔记

    nat技术(网络地址转换) 缺点就是进入和返回都通过调度器的服务器,未来可能会成为瓶颈 实验:nat 模式 先在调度器安装ipvsadm 后再添加网卡,后面就连不上网了(yum -y install ...

  6. --@angularJS--一个简单的UI-Router路由demo

    1.index.html: <!DOCTYPE HTML><html ng-app="routerApp"><head>    <titl ...

  7. java 数据设置和显示

    1. 首先设置ModelAndView 的值 @Override public ModelAndView handleRequest(HttpServletRequest arg0, HttpServ ...

  8. js动态控制table的tr,td增加及删除

    html: <table id='wifi_clients_table'   class="table table-striped table-bordered table-hover ...

  9. IIS HTTP重定向到HTTPS

    最近客户一个网站升级至HTTPS协议访问,但是为了用户输入,客户要求当用户输入的是HTTP协议时,能自动定向到HTTPS,类似百度网站,当你输入www.baidu.com并回车后,地址栏自动变成了ht ...

  10. PHP Memcached 实现简单数据库缓存

    Memcache常用方法 Memcache::add — 添加一个值,如果已经存在,则返回false Memcache::addServer — 添加一个可供使用的服务器地址 Memcache::cl ...