我目前有一个使用opencv修改过的iplimage。我需要绘制一条类似于二次方程抛物线的弧线,而我无法使用 opencv 内置的基本绘图功能来绘制弧线。我一直在研究opengl,但我只能找到贝塞尔曲线。用来完成此任务的最佳库是什么?
问问题
1459 次
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
OpenCV cvEllipse 就是你所需要的。只需注意如何使用参数。
cvEllipse(CvArr* img,CvPoint 中心,CvSize 轴,双角,双 startAngle,双 endAngle,CvScalar 颜色,int 厚度=1,int lineType=8,int shift=0)
于 2011-10-25T06:52:04.137 回答