opencv中的橢圓擬合

2021-08-20 21:37:19 字數 1676 閱讀 2661

首先貼乙個最簡單的程式:訪問:

//建立乙個用於繪製影象的空白圖    

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 輸入 二維點...