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

Jim*_*iel 64 algorithm image-manipulation command-line-interface

我的应用程序使用人们的照片和视频,我想要卡通.所以我需要一个算法来手动完成(我们的产品使用c ++/Qt,它有图像处理类)或者也许是一些CLI程序,我可以在我自己的应用程序中调用和使用它.

Cec*_*ame 47

以下是一些可以使用的算法:

  • 中位数或重复框模糊滤镜以获得卡通色调
    • 编辑:双边过滤应该更好地满足您的需求
  • 最小滤镜(第0百分位数)可增强某些类型的边缘
  • 使用RGB颜色立方体中的小子立方体或球体进行彩色图像分割
  • 使用边缘检测(例如Sobel内核或8向边缘跟踪)对分割图像进行通用边缘增强
  • 具有增强边缘的复合模糊/中值滤波图像

这些都是相当基础的,并且都非常容易实现.请记住,中值和盒子模糊滤镜可以使用内核半径的线性时间复杂度来实现.

更多编辑:

一旦你了解了Huang的算法,实现盒式模糊滤镜就是一块美味的蛋糕.

阅读材料:

  • 快速中位数和双边过滤(获取PDF)
  • 中值过滤恒定时间(获取PDF)注意:我在C#中使用Mono/SIMD实现了这一功能,以加速直方图合并,但是当直径超过~60像素时,它似乎只比O(r)算法好.相当数量的添加/子指令(收支平衡点),C++实现可能更适合利用SIMD.

其他阅读材料包括Gonzalez&Woods的数字图像处理(似乎是旧版本),用于分割和边缘追踪.8向边缘跟踪可能非常难以弯曲(在像素上或像素间边缘之间进行选择以及如何锁定边缘).我很乐意分享一些代码,但是百行不完全适合这里.


moo*_*are 22

您可以尝试使用旋转镜,就像toonyphotos.com一样:

旋转镜例

  • 来自FAQ:"Rotoscope需要人工输入才能正常工作." (5认同)

unw*_*ind 12

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


Joh*_*ett 7

如果有一组参数可以在GIMP的卡通过滤器(或其他一些过滤器组合)中实现所需的效果,则可以在批处理模式下运行.


mar*_*ert 6

我自己没有这样做,但想到两个步骤可能会给图像带来卡通效果.

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

  2. 减少图像中的颜色数量.


Rid*_*Dev 5

不确定这是否有帮助,但本教程为Photoshop建议执行以下操作:

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

这是结果.

在此输入图像描述

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