大致要求是这样,已知数个点,需要穿过这数个点的Bezier曲线的一组控制点。
代码思路主要是参照[AGG贝塞尔插值](http://www.antigrain.com/research/bezier_interpolation/index.html#PAGE_BEZIER_INTERPOLATION),这里有中文翻译版[中文翻译](http://blog.csdn.net/microchenhong/article/details/6316332)。
文章中主要是利用三角形的腰,平移到端点实现的。处理的效果的确不错,后面也给了实现代码,但是有一点说的很明白,代码是未曾优化过的。处理图最终达到这样的效果,又需要怎样的优化,这才是麻烦所在。
最终选定的方法,与文章中有所区别。
![谜一样的图](https://img-blog.csdn.net/20170804095916945?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMzM5OTE1MA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
当前点为A,标注红色的地方都是垂直的。D、E分别是AB、AC的中点,FAG所在直线与DE平行,F是D在FaG上的投影,G是E在FAG上的投影。以F、G作为A生成的控制点。起始点B点生成的控制点是F点参照AB中垂线生产的镜像点。
这种方法的好处是所有控制点都是收缩的。而上面文章中使用的方法,对于一些特殊情况,会出现控制点的位置(x,y)中存在负数,当然,里面提出的K系数也能解决这个问题。
![这里写图片描述](https://img-blog.csdn.net/20170804101239956?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMzM5OTE1MA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
//MyMidPoint2和两个BezierPointLocateX、Y是最后用上的。
代码:http://download.csdn.net/detail/u013399150/9920896
Bezier曲线 OpenCV
最新推荐文章于 2024-05-13 20:04:22 发布