筆記 單目測距

2021-10-07 20:34:03 字數 3595 閱讀 2455

我想做的測距是,監控場景,計算任意兩點間的距離,所以我是這樣去測試的:

首先,按照這篇部落格(鏈結)提供的**,在visual studio中建立專案,復現一下, **如下,由於有幾個引數我不清楚什麼意思,就按自己的理解先這樣處理了,**有注釋:

#include   

#include

#include

#include

#include

#include "windows.h"

#include "fstream"

/*opencv相關,有些標頭檔案可能是原作者別的地方需要,所以包含的標頭檔案比較多。

/但我看了一下本段**很多其實用不到,例如hog相關的,想刪可以刪掉,留著也無妨。*/

#include

#include

#include

#include

#include

#include

#include

#include

//hog特徵的c檔案

using namespace std;

using namespace cv;

rngrng

(12345);

int main()

width = frame.cols;

height = frame.rows;

cout <<

"影象寬度"

<< width << endl;

cout <<

"影象高度"

<< height << endl;

//視場**線

line

(frame,

point

(width /2,

0),point

(width /

2, height)

,scalar(6

,88,255),

3,cv_aa);

line

(frame,

point(0

, height /2)

,point

(width, height /2)

,scalar(6

,88,255),

3,cv_aa);

cout <<

"請輸入畫素座標值x0(以回車結束):"

<< endl;

cin >>x0;

cout <<

"請輸入畫素座標值y0(以回車結束):"

<< endl;

cin >>y0;

cout <<

"輸入的結果為"

<< endl;

cout <<

"當前畫素座標值x0為: "

<<

x0<< endl;

cout <<

"當前畫素座標值y0為 "

<<

y0<< endl;

point center(x0

,y0);

//繪製圓心

circle

(frame, center,3,

scalar(0

,255,0

),-1

,8,0

);//繪製圓輪廓

circle

(frame, center, radius,

scalar

(155,50

,255),

3,8,

0);namedwindow

("原圖",0

);imshow

("原圖"

, frame)

;waitkey(0

);d0 =

(height -y0)

*theta / height;

//步進小角度y1=

h1*tan(alpha + d0)

;//垂直距離b1=

(y1+d0

)*tan(beta /

2.0);x1

=2.0*b1

*(x0- width /

2.0)

/ width;

cout <<

"距離攝像頭水平距離x1為: "

<<

x1<<

" 厘公尺"

<< endl;

cout <<

"距離攝像頭垂直距離y1為: "

<<

y1<<

" 厘公尺"

<< endl;}}

waitkey(0);}

測試搭建的場景:外接了乙個usb攝像頭,高度48.0cm,相對於桌面,我是這麼理解的,因為我這裡主要測桌面的目標,所以以桌面為地平面,如果搭建的測試場景中主要關注地面的目標,那就以地面作為地平面。所以這裡也限制了實際監控使用場景最好是開闊的平整的地面。

攝像頭抓圖:640x480的圖上,一張a4紙(297mmx210mm),在畫面中4個點的座標如下所示,用作者提供的換算公式,計算出來,4個點相對於攝像機的座標,記錄如下。

引用原作者的描述:

該程式實現了輸入乙個畫素座標點,然後計算出該畫素點實際位置距離攝像頭水平距離和垂直距離,即實現了單目攝像頭測距。

測試過程截圖:每次輸入乙個點的座標,然後會計算出該點相對於攝像頭的水平距離和垂直距離。

**距離換算:**知道每個點相對於攝像機的座標後,就能用勾股定理計算兩點間的距離了。

例如:p1-p3距離:計算後約20.9cm,這和實際a4紙張的寬度210mm誤差不大,可接受。

p3-p4距離:29.9cm和a4紙長度297mm誤差不大。

說明:

以上就是我的測試,但由於我不知道d0引數是什麼,另外視場角和距離都是大概估計的,所以也不能評價這個方案的測距準確度如何,有想繼續的研究的可以繼續研究並分享。

Mobileye單目測距

其中 a是本車,前方車b和c,攝像頭p,焦距f,攝像頭高度h,和障礙物b c的距離分別是z1 z2,b c檢測框著地點在影象的投影是y1 y2。那麼按照相似三角形可以得出 y fh z,所以z fh y。首先假設路面是水平面,不考慮道路的坡度,實際上可以通過車道線的形狀計算出道路的坡度 如何確定車輛...

OpenCV 單目測距實現

最近要做乙個小專案,要完成相機的測距實現,最先考慮的是三角雷射測距,但是實現起來太麻煩了,基本要搭乙個簡易的雷射測距雷達.然後是雙目測距,然而乙個便宜的雙目工業相機也要四五百,而且以前也沒接觸過雙目測距.於是就想試試單目測距的效果怎麼樣,通過參考網路上的各種資料,加上以前玩過三角雷射測距,所以也算比...

python opencv單目測距 小孔成像原理

一 用相似三角形計算物體或者目標到相機的距離 我們將使用相似三角形來計算相機到乙個已知的物體或者目標的距離。相似三角形就是這麼一回事 假設我們有乙個寬度為 w 的目標或者物體。然後我們將這個目標放在距離我們的相機為 d 的位置。我們用相機對物體進行拍照並且測量物體的畫素寬度 p 這樣我們就得出了相機...