如何以编程方式卡通图像?

我的应用程序与我想要漫画的人的照片和video一起工作。 所以我需要一个手动的algorithm(我们使用c ++ / Qt来处理我们的产品,它具有image processing类),或者是一些CLI程序,我可以从我们自己的应用程序中调用和使用它。

这里有一些algorithm:

  • 中间或重复框模糊filter,以获得卡通的调色板
    • 编辑:双边过滤应该更适合你的需要
  • 最小filter(第零百分位)来增强某些types的边缘
  • 在RGB彩色立方体中使用小的子立方体或球体进行彩色图像分割
  • 使用边缘检测(如Sobel内核或8路边缘跟踪)对分割图像进行通用边缘增强
  • 合成模糊/中值滤波的图像具有增强的边缘

这些都是相当基本的,都很容易实现。 请记住,中值和框模糊滤波器可以用核半径的线性时间复杂度来实现。

更多修改:

一旦你了解了黄的algorithm,实现一个框模糊filter是一个美味的蛋糕。

阅读材料:

  • 快中值和双边滤波 (获取PDF)
  • 中值滤波常量时间 (获得PDF) 注意:我在C#中使用Mono / SIMD实现了加速直方图合并,但是直径超过〜60像素时,它似乎比Or )algorithm更好,这是由于相当数量的add / sub指令(盈亏平衡点),C ++实现可能更适合于SIMD。

其他阅读材料包括冈萨雷斯和伍兹的数字image processing (似乎是一个旧版本)分割和边缘跟踪。 8路边缘跟踪可能很难弯曲头部(在像素之间或像素边缘之间进行select,以及如何locking边缘)。 我很高兴能分享一些代码,但是百家乐在这里并不完全适合。

你可以尝试rotoscopy,像toonyphotos.com一样:

旋转镜的例子

你可能想看看Freestyle ,一个开源的(Google Summer of Code,甚至)项目,为Blender实现一个非真实感的渲染器 。 下面是一个卡通模式输出的例子: alt text GALLERY/CARTOON/girl-color-and-lines-crop.jpg

如果在GIMP的卡通filter(或其他一些filter组合)中有一些参数可以达到预期的效果, 那么它可以在批处理模式下运行 。

我自己并没有这样做,只是考虑了两个步骤,可能会使图像卡通。

  1. 检测边缘,并在这些边缘绘制相当相当粗的线条(几个像素)。

  2. 减less图像中的颜色数量。

不知道这是否会有所帮助,但本教程为Photoshopbuild议做到以下几点:

  1. 在Photoshop中打开您的图像
  2. 滤镜>模糊>高斯模糊。 将半径设定为3.0或更高,以尝尝。
  3. 编辑>淡入淡出模糊。 一个窗口会popup。 。 。 设置模式变暗。 您可能还需要降低不透明度。

结果如下。

在这里输入图像说明

我想你可以在你的程序中做类似的事情。

其实我不知道一个工具,但你可以看看osg(openSceneGraph)

有一个osgFX图书馆,有卡通效果…也许你可以从图书馆启发…


也许(我不知道)imagemagick有很多function,也许它有一个function,但我不知道…