首页 文章

如何确定opencv,c中椭圆的旋转角度和点之间的填充区域

提问于
浏览
0

我有三个点,让C说为中心点,而P1和P2是另外两个点 . 我计算了C和P1之间的角度,知道为angle1,c p2称为角度2.这是我用来计算它的代码

angle1 = atan2(p1.y - c.y, p1.x - c.x);
angle2 = atan2(p2.y - c.y, p2.x - c.x);

之后我用这个把它们改成了度数 .

if (angle1 >= 0)
        angle1 = angle1 * (180 / PI);
    else
        angle1 = (angle1 + 2 * PI) * (180 / PI);

    if(angle2 >= 0)
        angle2 = angle2 * (180 / PI);
    else
        angle2 = (angle2 + 2 * PI) * (180 / PI);

然后我使用这个openCv方法来计算绘制弧线,有时候两个点之间的弧线是完美的,而有时它会填充除了我在这里发布图像的两个点之外的所有圆圈 .

radius = sqrt(pow(c.x - p1.x, 2.0) + pow(c.y - p1.y, 2.0));
ellipse(outPutMat, c, cv::Size(radius, radius), 0, angle1, angle2, Scalar(0, 0, 0), -1, 8, 0);

这是图像
enter image description here

enter image description here

红点是点,而黑点是椭圆填充的颜色 . 对于第一图像agngle1 = 42.1376而angle2 = 338.962对于第二图像agngle1 = 152.447而angle2 = 223.363

第二张图片产生了正确的结果,但首先是错我只想填补点之间的区域 .

1 回答

  • 1

    经过短暂检查 - 似乎OpenCV函数计算中间角为 ma = (angle1 + angle2) / 2 并通过此点绘制弧 .

    (-45,45)和(45,-45)都给出相同的90度弧到零,(315,45)和(45,315)给出相同的270度弧 .

    要获得所需的结果,您没有将负角度映射到正值( (angle1 + 2 * PI) ),并在第一种情况下使用 42-21 值 .

相关问题