![](/img/trans.png)
[英]How to get coordinates points using fit ellipse function with their angle (opencv)
[英]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.