0

我目前有一个使用opencv修改过的iplimage。我需要绘制一条类似于二次方程抛物线的弧线,而我无法使用 opencv 内置的基本绘图功能来绘制弧线。我一直在研究opengl,但我只能找到贝塞尔曲线。用来完成此任务的最佳库是什么?

4

3 回答 3

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

于 2011-10-24T15:36:41.363 回答
0

我在这个页面上找到了这个。它有效,我确信如果我不知道如何将 iplimage 转换为 glut 可以使用的东西,我可以在 opencv 中应用这个算法,因为它与上面提到的非常相似

于 2011-10-25T02:33:48.470 回答
0

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

cvEllipse(CvArr* img,CvPoint 中心,CvSize 轴,双角,双 startAngle,双 endAngle,CvScalar 颜色,int 厚度=1,int lineType=8,int shift=0)

于 2011-10-25T06:52:04.137 回答