我的应用与人物的照片和视频一起使用,我想把它们变成卡通风格。因此,我需要一种算法手动完成这个任务(我们的产品使用c++/Qt,具有图像处理类),或者可以调用并从自己的应用程序中使用的CLI程序来完成这个任务。
我的应用与人物的照片和视频一起使用,我想把它们变成卡通风格。因此,我需要一种算法手动完成这个任务(我们的产品使用c++/Qt,具有图像处理类),或者可以调用并从自己的应用程序中使用的CLI程序来完成这个任务。
以下是一些可以尝试的算法:
这些都是相当基础的,很容易实现。请注意,中值和盒式模糊滤镜可以实现与内核半径线性时间复杂度。
更多编辑:
一旦您掌握了Huang算法的思路,实现盒式模糊滤镜就像品尝美味的蛋糕一样简单。
阅读材料:
其他阅读材料包括Gonzalez& Woods数字图像处理(似乎是旧版本)用于分割和边缘跟踪。8向边缘跟踪可能会让人很难理解(需要在一个像素或者两个像素之间的边缘之间进行选择,并决定如何抓住这些边缘)。我很愿意分享一些代码,但是几百行的代码不太容易贴在这里。
您可以尝试进行动态描绘,就像 toonyphotos.com 所做的一样:
我没有亲自尝试过,但是考虑以下两个步骤可以使图像看起来更加卡通化:
检测边缘,并在这些边缘上绘制相当厚的线条(几个像素)。
减少图像中的颜色数量。
不确定这是否有帮助,但是这篇Photoshop教程建议执行以下步骤:
这是最后的效果。
我想您也可以在您的程序中执行类似的操作。
双边滤波简化/抽象照片。您可能需要将双边滤波器分离,以使其更快。沿着梯度和法线方向分别进行双边滤波。
检测边缘。例如,使用高斯差分算法。您可能需要在梯度方向上使用DoG,并沿着流线平滑它。要获取流线,您需要通过结构张量获取边缘切线流(ETF)。
量化颜色。实际上,您将量化亮度以模拟单色调/卡通渲染。
在量化后的抽象图像和检测到的边缘之间进行混合。
实际上我不知道有什么工具,但你可以看看osg(openSceneGraph)。
这里有一个osgFX库和卡通效果...也许你可以从那个库中获得灵感...
也许(我不确定)ImageMagick有很多功能,也许它有这样的一个功能,但我不知道...