有谁知道我们可以将使用相机拍摄的真实图像转换为卡通空间?
请注意,我的目标不是创建动画或喜欢,而只是翻译为“卡通颜色”,如果可能的话。
将简单的重新量化到一个空间,其中有较少的量化水平工作或其他一些特定的变换是更好的?
任何帮助将是有用的,因为我无法找到任何材料。
Thnx 提前。
金字塔平均位移 + 检测到的边缘的轮廓似乎做的工作。
代码:
cv::Mat segmented, gray, edges;
cv::pyrMeanShiftFiltering(input, segmented, 15, 40);
cv::cvtColor(segmented, gray);
cv::Canny(gray, edges, 150, 150);
cv::cvtColor(edges, edgesBgr, CV_GRAY2BGR);
cv::Mat result = bgr - edgesBgr;
Here is a result i got:
Details:OpenCV Tutorial Part 6你想做的是最常见的 3D 模型,被称为cel-shading,或“香椿阴影”。基本上,你试图强制均匀的颜色和强制在某些角度相对于光源的突变。
显然,这不能很好地转换为 2D 输入图像。您可以做的是重新量化,但要确保均匀填充区域并在图像梯度高的地方中断。
Non-linear diffusion是一种去噪技术,它迫使区域变得均匀以去除噪声,如果让它循环太多次迭代,则会得到一个看起来很卡通的图像。
我已经实现了,也许 2-3 年前,它工作得很好,考虑到它不是那么难实现。但是,你会想要一个 GPGPU 实现,因为它是慢!
你也可以看看均值漂移分割。这里有一个实现:EDISON
在黑暗中完成拍摄:
转换为 HSV 颜色空间 (cvtColor 使用 CV_BGR2HSV)
单独留下 H(ue),或者如果你愿意的话,把它量化到一些较小的集合
具有低阈值的二进制阈值 S(饱和度),以便将粉彩推向白色
具有低阈值的二进制阈值 V(alue),以便深色的东西变成黑色
绝对未经测试。可能是在我的帽子里说出来的...但是如果它能工作的话,应该是相当低的 CPU 使用率。这让我觉得是一种用滑块启动步骤 2-4 中所需值的东西,只是摆弄它。
编辑:一位朋友指出,您可能还需要对象周围的线条。我的第一个想法是使用cvCanny
来挑选边缘(需要灰度图像...我不确定在 HSV 卡通之前或之后这样做是否会更好。可能是之前)。这些将是一个像素宽,这可能还不够,因此您可能希望dilate
将它们从卡通上减去一些像素,从而使它们变宽。
本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处
评论列表(61条)