给定轮廓勾勒出OpenCV / Python中’S’形状的边缘,可以使用哪些方法沿形状中心追踪曲线?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了给定轮廓勾勒出OpenCV / Python中’S’形状的边缘,可以使用哪些方法沿形状中心追踪曲线?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1447字,纯文字阅读大概需要3分钟。
内容图文
如果轮廓勾勒出字母S的边缘(例如,在漫画中),我怎样才能沿着这个字母的书脊获得一系列点,以便稍后使用直线,三次样条或其他曲线表示技术来表示此形状?我想在Python / OpenCV中使用30-40个点来处理和表示形状.
形态骨架化可能有助于此,但操作似乎总是产生错误的分支.有没有更好的方法将轮廓折叠成字母的’S’形状?
在下面的例子中,您可以看到错误的“蛇的舌头”,就像形态骨架化产生的分支一样.我不知道如果这是算法应该做的事情是否错误是公平的,但对我来说,我不希望他们在那里.
以下是漫画sans字母:
骨架化的另一个问题是它的计算成本很高,但是如果你知道一种方法可以使它像分支一样形成“蛇舌”,那么我会尝试一下.
解决方法:
实际上,矢量化字体并非易事,而且相当棘手.要使用贝塞尔曲线正确地矢量化字体,您需要跟踪.你可以使用很多库来跟踪图像,例如Potrace.我不是很了解使用python,但根据我的经验,我使用c描述了类似的项目:
A.使用立方贝塞尔曲线拟合轮廓
虽然应该做很多工作,但这种方法很简单.我相信如果你想要适应从细化中获得的骨骼,这也很有效.
>查找对象的轮廓/边缘,可以使用OpenCV函数findContours()
>整个形状不能使用单个三次贝塞尔曲线表示,因此使用Ramer-Douglas-Peucker (RDP)将它们分成几个线段.重要的是,在此步骤中,不要删除任何点,仅使用RDP来分割点.请参阅下图中的彩色片段.
>对于每个段,其中S是一组n个点S =(s0,s1,… Sn),使用Least Square Fitting拟合一个三次贝塞尔曲线
最小二乘拟合的插图:
B.分辨率分辨率独立曲线渲染
这个paper中描述的方法非常复杂,但是可用于显示矢量字体的最佳算法之一:
>查找轮廓(与方法A相同)
>使用RDP,与方法A不同,使用RDP删除点,以便简化轮廓.
> delaunay三角测量.
>使用本文中描述的方法在外边缘绘制贝塞尔曲线
内容总结
以上是互联网集市为您收集整理的给定轮廓勾勒出OpenCV / Python中’S’形状的边缘,可以使用哪些方法沿形状中心追踪曲线?全部内容,希望文章能够帮你解决给定轮廓勾勒出OpenCV / Python中’S’形状的边缘,可以使用哪些方法沿形状中心追踪曲线?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。