最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
新海诚(你的名字)滤镜特效如何实现?巧用代码实现新海诚滤镜效果的教程
时间:2016-12-14 编辑:简简单单 来源:一聚教程网
最近新海诚滤镜特效很火,Camera360为此还专门开发了相应的app,天天P图等等也是争先恐后,今天,本人来给大家解密一下。
先给大家看下本人程序实现的效果图:
原图
效果图
下面本人来详细说明一下如何程序实现这个滤镜特效:
1,天空检测与分割
这个滤镜中最主要的就是天空区域的分割与替换,关于天空分割,本人给出一篇参考文献:
Sky detection by effective context inference. Neurocomputing.2016
该文章是基于训练学习来实现天空分割的,大概流程如下:
2,天空MASK
通过1得到天空的精确分割区域后,我们需要对这个区域进行二值化,黑色为非天空区域,白色为天空区域,然后对这个二值图进行一个适当半径的高斯滤波,使得天空与非天空之间的边界线有足够的过度,也就是PS中的羽化。这里以下图为例:
3,天空融合
使用2中的Mask,将原图和天空图进行融合,这一步使用PS中的正常模式进行融合即可,白色区域显示天空图,黑色区域显示原图;这里使用的天空图像如下图所示:
(c)天空图像
效果图如下:
4,调色
调色这一步很关键,你需要什么样风格的漫画,就需要针对调出什么样风格的颜色色调。本人在这里参考的是如下的风格(ps://www.zhihu.com/question/29594460?from=groupmessage&isappinstalled=1">点击打开链接):
5,光晕
调色之后,我们需要给图片上添加一定的光晕,这一步,我们直接使用光晕模版,与原图做滤色的图层混合,即可。
本人使用的光晕模版如下:
4-5两步骤的结果图如下:
关于滤色图层混合的计算,代码如下:
- int ModeFilterColor(int basePixel, int mixPixel)
- {
- int res = 0;
- res = 255 - (255 - mixPixel) * (255 - basePixel) / 255;
- return Math.Min(255, Math.Max(0, res));
- }
6,饱和度和亮度调节
最后,对图像进行一个饱和度和亮度的简单调节,调出一种明亮清新的感觉,调节步骤如下:
效果图如下:
(g)新海诚滤镜效果图
如果需要边界的加强感觉,可以在1之前,对图像进行一个照亮边缘的操作,得到照亮边缘图A,然后讲A和原图进行叠加处理,效果会更好一点。
叠加处理的代码如下:
- int ModeOverlay(int basePixel,int mixPixel)
- {
- int res = 0;
- res = ((basePixel <= 128) ? (mixPixel * basePixel / 128):(255 - (255 - mixPixel) * (255 - basePixel) / 128));
- return CheckRange(res);
- }
最后附上调用的逻辑代码:
- private void specialFilterToolStripMenuItem_Click(object sender, EventArgs e)
- {
- if (pictureBox1.Image != null)
- {
- //获取由1天空分割得到的天空图像
- Bitmap sky = new Bitmap(Application.StartupPath + "\\sky.png");
- //获取由2得到的天空Mask图像
- Bitmap mask = new Bitmap(Application.StartupPath + "\\mask_6.jpg");
- //天空融合
- curBitmap = SpecialFilter(srcBitmap, sky, mask);
- //调色与光晕
- Bitmap map = new Bitmap(Application.StartupPath + "\\map.png");
- Bitmap light = new Bitmap(Application.StartupPath + "\\light.png");
- curBitmap = MapFilter(curBitmap, light, map);
- //亮度与饱和度调节
- Bitmap anMap = new Bitmap(Application.StartupPath + "\\anmap.png");
- curBitmap = AnMapFilter(curBitmap, anMap);
- pictureBox1.Image = curBitmap;
- }
- }
以上就是新海诚滤镜的程序实现方案,原理已经写清楚了,大家可以尝试一下!
-
上一个: PS简单几步给照片制作时尚漂亮的边框
-
下一个: 设计作品时素材如何快速拼接
相关文章
- ps怎么制作图案画笔 ps制作图案画笔方法 04-16
- 字魂字体如果放PS里面用 字魂字体放PS里面用的方法 01-03
- PS如何在墙上贴图 PS在墙上贴图的方法 12-31
- cad异常代码0xc00000fd怎么回事 如何解决 01-08
- coreldraw12偏色怎么办 coreldraw12偏色如何解决 11-24
- 如何利用PhotoShop无缝拼图 利用PhotoShop无缝拼图教程 10-07