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 座標是帶有...