基於opencv求直線方程

2021-08-21 17:43:38 字數 2010 閱讀 5257

在影象處理中,得到目標邊緣的點,希望擬合精確的直線方程,一下**給出一些二維點,即可輸出直線方程,精確到亞畫素級:

//求直線方程

struct ptonline

;bool cmpacs(ptonline &a, ptonline &b)

void removeptx(vector&points, double smallpart, double bigpart)//對x座標從大到小排列,smallpart為尾部的點集,bigpart為首部的點集

sort(vecline.begin(), vecline.end(), cmpacs);

points.clear();

for (int i = removenum1; i < vecline.size() - removenum2; i++)

}void removepty(vector&points, double smallpart, double bigpart)//對y座標從大到小排列,smallpart為尾部的點集,bigpart為首部的點集

sort(vecline.begin(), vecline.end(), cmpacs);

points.clear();

for (int i = removenum1; i < vecline.size() - removenum2; i++)

}bool linefit(vectorrec, double &a1, double &b1, double &c1)

for (int i = 0; i < size; i++)

}if (count == size)

double a = 0, b = 0, c = 0;

if (size < 2)

double x_mean = 0;

double y_mean = 0;

for (int i = 0; i < size; i++)

x_mean /= size;

y_mean /= size; //至此,計算出了 x y 的均值

double dxx = 0, dxy = 0, dyy = 0;

for (int i = 0; i < size; i++)

double lambda = ((dxx + dyy) - sqrt((dxx - dyy) * (dxx - dyy) + 4 * dxy * dxy)) / 2.0;

double den = sqrt(dxy * dxy + (lambda - dxx) * (lambda - dxx));

a = dxy / den;

b = (lambda - dxx) / den;

c = -a * x_mean - b * y_mean;

for (int i = 0; i1.5)

}vectorrecnew(size);

for (int i = 0; i < size; i++)

if (size < 2)

double x_mean1 = 0;

double y_mean1 = 0;

for (int i = 0; i < size; i++)

x_mean1 /= size;

y_mean1 /= size; //至此,計算出了 x y 的均值

double dxx1 = 0, dxy1 = 0, dyy1 = 0;

for (int i = 0; i < size; i++)

double lambda1 = ((dxx1 + dyy1) - sqrt((dxx1 - dyy1) * (dxx1 - dyy1) + 4 * dxy1 * dxy1)) / 2.0;

double den1 = sqrt(dxy * dxy + (lambda - dxx) * (lambda - dxx));

a1 = dxy1 / den1;

b1 = (lambda1 - dxx1) / den1;

c1 = -a1 * x_mean1 - b1 * y_mean1;

return true;

}

求直線的引數方程

如果二維空間內有兩個點 2,1 和 0,2 那麼經過這兩點的直線方程是什麼?初中的知識可以告訴我們,斜率是 k displaystyle frac 現在使用向量和引數方程來理解這個問題。假設在二維空間內有兩個向量 a 2,1 和 b 0,2 如下圖所示 乙個不太準確的說法是,將 b a 的兩端延長,...

一般方程與引數方程求直線交點

一 乙個例子 如上圖,有兩條直線,設l1,l2。l1上有兩點 0,0 10,10 l2上有兩點 0,10 10,0 它們的交點是 5,5 求解交點有兩種效率較高的常用方法,一般方程法與引數方程法,以下將分別描述其原理及實現。二 一般方程法 直線的一般方程為f x ax by c 0。既然我們已經知道...

C 求直線方程並求直線延長線上的某點的演算法

a1 a2 b1 b2 c1 c2 兩直線平行 a1 a2 b1 b2 c1 c2 兩直線重合 橫截距a c a 縱截距b c b 表示斜率為k,且過 x0,y0 的直線 表示與x軸 y軸相交,且x軸截距為a,y軸截距為b的直線 表示斜率為k且y軸截距為b的直線 表示過 x1,y1 和 x2,y2 ...