2011-10-22 46 views
0

我目前有一个使用opencv进行修改的iplimage。我需要绘制类似于二次方程抛物线的弧线,并且我无法使用opencv中内置的基本绘图函数创建弧线。我一直在研究opengl,但我所能找到的都是贝塞尔曲线。什么是最好的图书馆来实现这一目标?在IplImage上绘制一个二次弧

回答

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的贝塞尔曲线的支持 OpenCV中支持Bezier曲线的第三方库。我过去曾尝试使用this one。通过少量计算,您可以使用加权Bezier曲线表示任意圆锥曲线。看看维基百科页面底部附近的Rational Bezier曲线部分:Bezier Curve

+0

OpenCV的支持贝塞尔曲线? – Jacob

+1

@Jacob:好 - 我不相信他们是本地支持的。我过去曾经尝试过第三方的东西。回答编辑。 – Throwback1986

+0

我目前的x和y值约为抛物线上7点,我知道方程。我想我只是填写我认识的人之间的界限。 –

0

我在this页面找到this页面。它的工作原理和我相信,如果我无法弄清楚如何将iplimage转换为可供使用的过量我可以在opencv中应用此算法,因为它与上述以下提到的 非常相似。

0

OpenCV cvEllipse是你所需要的。请注意如何使用参数。

cvEllipse(CvArr * IMG,CvPoint中心,CvSize轴,双角,双由startAngle,双endAngle,CvScalar颜色,INT厚度= 1,INT线型= 8,INT移位= 0)