1
A
回答
3
如果我正確地理解了你,你已經檢測到輪廓,其中一些是橢圓,有些不是,你希望能夠決定哪些是橢圓。這樣對嗎? 如果是,我會建議使用cv::fitEllipse()
。該文檔說,它適合一個橢圓的點向量,所以R平方很小。不幸的是,該函數不會顯式返回R平方值。您可以自己可能實現它...
作爲一種變通方法,您還可以使用的東西,如:
- 獲得C輪廓
- 適合橢圓E裝到C
- 比較è至C.
要比較它們,您可以使用矩陣(參見cv::moments()
和cv::matchShapes()
)。 雖然我不認爲你需要不變的時刻。
或者,您可以繪製C和E找到表面重疊的比例。
祝你好運,
0
@Ahsan - 你必須通過所有輪廓,迭代和嘗試,以適應橢圓。如果您發現該曲線擬合數學困難短路線將是
像 - 通過每個輪廓 迭代 - 放棄非凸輪廓 - 現在使當前輪廓的口罩,使用CV :: matchShapes功能做shapeMatching 。
0
fitEllipse給我們RotatedRect。
而且我們可以使用橢圓特定的屬性,可以將其轉換爲圓。
double is_ellipse(std::vector<cv::Point> const& cloud, RotatedRect const& rr)
{
double distance =0;
for(auto const& point: cloud)
{
Point2f unit;
unit.x = ((rr.center.x - point.x ) * cos(- rr.angle*(3.1415926/180)) - (rr.center.y - point.y ) * sin(- rr.angle*(3.1415926/180))) * 2/rr.size.width ;
unit.y = ((rr.center.x - point.x ) * sin(- rr.angle*(3.1415926/180)) + (rr.center.y - point.y ) * cos(- rr.angle*(3.1415926/180))) * 2/rr.size.height;
double len = sqrt(unit.x* unit.x + unit.y * unit.y);
distance += fabs(1- len);
}
return distance/cloud.size();
}
這裏是用來計算圓的邊界的平均距離。 很容易修改其他一些統計功能,如:最大偏差。
相關問題
- 1. matplotlib繪製橢圓輪廓
- 2. 如何檢查橢圓形是否觸及任何其他橢圓形VB
- 3. 如何檢查邊是否是網格的輪廓?
- 4. HTML5畫布橢圓輪廓在轉換後變爲
- 5. 如何檢測橢圓是否與另一個橢圓/矩形碰撞
- 6. 將兩個橢圓擬合成一個身體的輪廓
- 7. 如何在給定角度的橢圓輪廓上得到一個點?
- 8. 用輪廓填充圓形
- 9. 輪廓檢測
- 10. 將輪廓調整爲圓形
- 11. umbraco輪廓檢查是否勾選複選框
- 12. 橢圓如何與橢圓相交?
- 13. 搜索輪廓是否存在於另一個輪廓
- 14. 如何設置爲默認matplotlib輪廓圖總是標記輪廓
- 15. canny邊緣檢測後查找輪廓
- 16. 如何糾正檢測到的橢圓
- 17. PHP:檢查橢圓內的點/座標
- 18. 輪廓輪廓着色器
- 19. 太空圓形輪廓(三維)(3D)
- 20. 交叉圓的繪製輪廓
- 21. 使用sdl2繪製輪廓圓
- 22. 透明圓柱體的輪廓渲染
- 23. 算法需要:繪製輪廓圓點
- 24. 四分之一圓輪廓的點數
- 25. 如何僅以黑色查找輪廓?
- 26. 是否有中點橢圓算法?
- 27. 如何檢查某個地區是否爲圓形?
- 28. 檢測閉合輪廓
- 29. 用imagemagick檢測輪廓
- 30. OpenCV檢測輪廓相交
你可以更具體地說你的意思是「大約」嗎? – mathematician1975
@ mathematician1975,我已經上傳了圖片,以及我認爲大概是有點太多了,我會改變它!謝謝 – Shan
[OpenCV的橢圓檢測]可能的重複(http://stackoverflow.com/questions/10982988/ellipse-detection-with-opencv) – ArtemStorozhuk