簡體   English   中英

如何確定橢圓的旋轉角度和opencv,c ++中的點之間的填充區域

[英]how to determine the rotation angle of ellipse and fill area between points in opencv, c++

我有三個點,可以說C為中心點,而P1和P2是另外兩個點。 我已經計算出C和P1之間的角度,稱為angle1和c p2,稱為angle2。這是我用來計算它的代碼

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);

這是圖像 在此處輸入圖片說明

在此處輸入圖片說明

紅色點是點,而黑色是橢圓填充的顏色。 對於第一個圖像agngle1 = 42.1376,而angle2 = 338.962對於第二個圖像agngle1 = 152.447,而angle2 = 223.363

第二張圖片產生了正確的結果,但第一張是錯誤的。 我只想填充點之間的區域。

經過簡短檢查-似乎OpenCV函數將中間角度計算為ma = (angle1 + angle2) / 2並通過該點繪制圓弧。

(-45,45)和(45,-45)都通過零給出相同的90度弧度,(315,45)和(45,315)給出相同的270度弧度。

為了獲得理想的結果,您沒有將負角度映射到正值( (angle1 + 2 * PI) ),並且在第一種情況下使用42-21值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM