首先貼乙個最簡單的程式:訪問:
//建立乙個用於繪製影象的空白圖
cv::mat image = cv::mat::ones(480, 640, cv_8uc3);
//設定藍色背景
image.setto(cv::scalar(100, 0, 0));
//輸入擬合點
std::vectorpoints;
points.push_back(cv::point(200, 240));
points.push_back(cv::point(300, 400));
points.push_back(cv::point(400, 360));
points.push_back(cv::point(500, 300));
points.push_back(cv::point(500, 200));
points.push_back(cv::point(300, 150));
//將擬合點繪製到空白圖上
for (int i = 0; i < points.size(); i++)
//獲取擬合橢圓的外包圍矩形
cv::rotatedrect rotate_rect = cv::fitellipse(points);
//繪製擬合橢圓
cv::ellipse(image, rotate_rect, cv::scalar(0, 255, 255), 2, 8);
cv::imshow("image", image);
cv::waitkey(0);
其次,這裡有關於opencv橢圓擬合的各種定義:
opencv中的橢圓通過rotatedrect來定義,其center(塊中心(x,y)), size(寬和高,寬小於高), angle(旋轉角)分別對應橢圓的中心,短軸和長軸,旋轉角度。
rotatedrect box = fitellipse(pointsf);
//把那些長軸與短軸之比很多的那些橢圓剔除。
if( max(box.size.width, box.size.height) > min(box.size.width, box.size.height)*8 )
continue;
//繪製輪廓
drawcontours(cimage, contours, (int)i, scalar::all(255), 1, 8);
//繪製橢圓
ellipse(cimage, box, scalar(0,0,255), 1, cv_aa);
//繪製橢圓
// ellipse(cimage, box.center, box.size*0.5f, box.angle, 0, 360, scalar(0,255,255), 1, cv_aa); //注意這裡需要乘以0.5
最後,目前opencv3中支援三種橢圓擬合方式:fitellipse,fitellipseams,fitellipsedirect,其中第三種來自《
可以訪問
來看官方的橢圓擬合事例。
1. 2.
3.
4.
opencv 橢圓擬合
include cv.h include highgui.h include using namespace std int slider pos 23 閾值 iplimage image02 0,image03 0,image04 0 void process image int h int ma...
opencv橢圓擬合
目標 通過橢圓擬合求出目標長短軸 思路 先用canny計算出待擬合橢圓的邊界座標,opencv中fitellipse函式可通過最小二乘法來擬合乙個橢圓使得點盡量在橢圓上。如上圖,右邊是拖過canny計算出邊界點資訊,左圖是擬合出來的橢圓。以下作引數說明 def fit ellipse img edg...
OpenCV 橢圓擬合fitEllipse
本文的主要參考為官方文件opencv249 fitellipse和部落格 opencv中的橢圓擬合 以及 learning opencv 3 page424 425 opencv中提供的橢圓擬合api如下 rotatedrect fitellipse inputarray points 輸入 二維點...