攝像頭距離標定方法研究(得到畫素和公釐的轉換比)

2021-09-07 07:01:49 字數 2276 閱讀 9611

一般在高精度測量時需要做以下幾個標定,一光學畸變標定(如果您不是用的軟體鏡頭,一般都必須標定),二投影畸變的標定,也就是因為您安裝位置誤差代表的影象畸變校正,三物像空間的標定,也就是具體算出每個畫素對應物空間的尺寸。

前兩者應該都可以通過「張正友」標定方法進行解決;對於空間的標定,基本上都是通過獲得比對現實中的已經知道長度的物體,獲得畫素當量到長度的轉化。

現實拍攝的物體,或多或少會有噪音干擾,在標定的過程中還需要影象處理演算法進行糾正。

比如我獲得這樣的。這幅的獲取,基於我自己改造的影象處理支架,對於普通的實驗來說,已經比較純淨了。由於使用的是鋼尺,反光比較厲害。為了便於標定,我將10厘公尺和20厘公尺兩個地方用綠色膠帶纏繞住。

下一步,就是要獲得關鍵區域。通過gopre的分析,原始影象在yuv域下,比較方便分割

編寫**分割,閾值分析

這個時候還是有噪音的,但是已經比較理想了。最合適的方法就是投影分析。由於gocvhelper中的投影分析本來是對字元投影進行分割的,所以需要適當地修正。

void projection4ruler(mat

src, int& down1,int& up2 ,int direction)

vdate.push_back(itmp);

}}else

}//過濾掉所有噪音

//尋找第乙個下邊沿和第二個上邊沿

down1 = 1;

up2   = src.cols - 1;

for (int

i=0;i

}for (int

i= down1;i}}

尋找並且標註出來,非常準確。

圖上(1767 - 771  =  996)對於10厘公尺,那麼,那麼1個畫素相當於0.1公釐(這個整數只是巧合)

多次測量,驗證演算法的穩定性,並運用於實際專案。 小結

基於演算法庫和成熟的思路,能夠加速解決問題速度。

比較好的視覺環境也很重要。

附全部**

//gocvhelper的demo程式

#include "stdafx.h"

#include 

#include "opencv2/core/core.hpp"

#include "opencv2/highgui/highgui.hpp"

#include "opencv2/imgproc/imgproc.hpp"

#include "gocvhelper.h"

using namespace std;

using namespace cv;

using namespace go;

#define  vp

vector

<:point>  //用vp符號代替 vector

void projection4ruler(mat

src, int& down1,int& up2 ,int direction)

vdate.push_back(itmp);

}}else

}//過濾掉所有噪音

//尋找第乙個下邊沿和第二個上邊沿

down1 = 1;

up2   = src.cols - 1;

for (int

i=0;i

}for (int

i= down1;i

}}

int _tmain(int argc, _tchar* argv)

來自為知筆記(wiz)

基於opencv的攝像頭的標定

四個座標系分別為 世界座標系 ow 攝像機座標系 oc 影象物理座標系 o1,單位mm 影象畫素座標系 o,位於視野平面的左上角,單位pix 空間某點p到其像點p的座標轉換過程主要是通過這四套座標系的三次轉換實現的,首先將世界座標系進行平移和轉換得到攝像機座標系,然後根據三角幾何變換得到影象物理座標...

監控攝像頭鏡頭可視距離和角度

監控攝像機鏡頭看清人臉的距離與監控角度 一 常見鏡頭視角角度 規格角度 2.1 mm 小鏡頭1 3 150 2.5mm 小鏡頭1 3 130 2.8mm 小鏡頭1 3 115 2.8mm 固定光圈 1 3 115 3.6mm 1 3 96 4mm 1 3 78 6mm 1 3 53 8mm 1 3 ...

webrtc QOS方法七(攝像頭採集幀率調整)

檢查cpu占有率 編碼解碼時間,都沒有異常。按理來說效能是可以達到30fps的實時通訊能力的。1 首先確認到底是不是攝像頭採集出來的幀率就低,還是系統排程慢,導致採集幀率低。ffmpeg的命令列如下 ffmpeg list devices true f dshow i dummy 顯示要採集攝像頭裝...