OpenCV 由點集擬合直線

2021-09-25 17:01:05 字數 1413 閱讀 7941

opencv有乙個函式fitline,其函式原型

void cv::fitline(inputarray points,

outputarray line,

int disttype,

double param,

double reps,

double aeps

)

其中,計算距離有這幾種方式

這裡就選用檢測到的第一條直線附近的點集。

int n = 0;

cv::mat oneline(cannyimg.size(), cv_8u, cv::scalar(0));

cv::line(oneline, cv::point(lines[n][0], lines[n][1]), cv::point(lines[n][2], lines[n][3]), cv::scalar(255), 3);

cv::bitwise_and(cannyimg, oneline, oneline);

cv::namedwindow("line", cv_window_autosize);

cv::imshow("line", oneline);

std::vectorpoints;

for (int y = 0; y < oneline.rows; y++)

}} cv::vec4f line;

cv::fitline(points, line, cv::dist_l2, 0, 0.01, 0.01);

int x0 = line[2];

int y0 = line[3];

int x1 = x0 + 500 * line[0];

int y1 = y0 + 500 * line[1];

cv::mat drawimg2;

srcimg.copyto(drawimg2);

cv::line(drawimg2, cv::point(x0, y0), cv::point(x1, y1), cv::scalar(0, 0, 255), 2);

cv::namedwindow("fitline", cv_window_autosize);

cv::imshow("fitline", drawimg2);

cv::waitkey(0);

選用的直線點集

擬合出的直線

OpenCV直線擬合

摘抄自 opencv 提供的直線擬合函式。函式原型如下 void fitline inputarray points,outputarray line,int disttype,double param,double reps,double aeps disttype 指定擬合函式的型別,可以取 c...

Opencv 擬合直線

最小二乘法是勒讓德 a.m.legendre 於1805年在其著作 計算慧星軌道的新方法 中提出的。最小二乘法就是通過最小化誤差的平方和,使得擬合物件無限接近目標物件。在影象處理中主要用於擬合線,通過求取樣點距離誤差最小的線,可以是直線,曲線,橢圓,圓等。求解方法目前分為多項式和概率 最大似然 估計...

OpenCV 學習(直線擬合

hough 變換可以提取影象中的直線。但是提取的直線的精度不高。而很多場合下,我們需要精確的估計直線的引數,這時就需要進行直線擬合。直線擬合的方法很多,比如一元線性回歸就是一種最簡單的直線擬合方法。但是這種方法不適合用於提取影象中的直線。因為這種演算法假設每個資料點的x 座標是準確的,y 座標是帶有...