我目前有一个使用opencv修改过的iplimage。我需要绘制一个像二次方程的抛物线那样的弧,我无法使用opencv中内置的基本绘图函数制作一个弧。我一直在研究opengl,但我能找到的都是bezier曲线。什么是最好的库来实现这个目标?
答案 0 :(得分:0)
我不建议转到OpenGL(基于你在帖子中提供的内容)。
如果你想采用一种简单的方法,你可以逐点求解二次方程(即假设x是自变量,然后求解y)。一旦知道了x和y,就可以在指定的点绘制颜色。我在下面提供了一个片段,说明了在OpenCV中为像素着色的方法。按照原样使用此代码:它对我有用,但它没有考虑任何抗锯齿,透明度,子像素精度等。
void overlay(IplImage *o, const IplImage *m, const CvScalar &color)
{
CvSize size = cvGetSize(o);
unsigned char *p1 = NULL;
unsigned char *p2 = NULL;
for (size_t r=0;r<size_t(size.height);r++)
for (size_t c=0;c<size_t(size.width);c++)
{
p1 = cvPtr2D(m, r, c);
if (p1[0] == 255)
{
p2 = cvPtr2D(o, r, c);
p2[0] = color.val[0]; // R
p2[1] = color.val[1]; // G
p2[2] = color.val[2]; // B
}
}
}
或者,您可以使用 OpenCV的Bezier曲线支持第三方库来支持OpenCV中的Bezier曲线。我过去曾尝试this one。通过一点计算,您可以使用加权Bezier曲线表示任意圆锥曲线。看一下维基百科页面底部附近的Rational Bezier曲线部分:Bezier Curve
答案 1 :(得分:0)
答案 2 :(得分:0)
OpenCV cvEllipse就是您所需要的。请注意如何使用参数。
cvEllipse(CvArr * img,CvPoint center,CvSize axes,double angle,double startAngle,double endAngle,CvScalar color,int thickness = 1,int lineType = 8,int shift = 0)