-
大小: 3KB文件類型: .py金幣: 1下載: 0 次發(fā)布日期: 2021-06-02
- 語言: Python
- 標(biāo)簽: 相機(jī)標(biāo)定??
資源簡(jiǎn)介
單目相機(jī)標(biāo)定,棋盤格畸變糾正,附帶代碼注釋,輸出內(nèi)參,外參,畸變函數(shù)
代碼片段和文件信息
import?cv2
import?numpy?as?np
import?glob
#?找棋盤格角點(diǎn)
#?閾值?
#criteria:角點(diǎn)精準(zhǔn)化迭代過程的終止條件
criteria?=?(cv2.TERM_CRITERIA_EPS?+?cv2.TERM_CRITERIA_MAX_ITER?30?0.001)
#棋盤格模板規(guī)格
w?=?6
h?=?9
#?世界坐標(biāo)系中的棋盤格點(diǎn)例如(000)?(100)?(200)?....(850),去掉Z坐標(biāo),記為二維矩陣
objp?=?np.zeros((w*h3)?np.float32)
‘‘‘
設(shè)定世界坐標(biāo)下點(diǎn)的坐標(biāo)值,因?yàn)橛玫氖瞧灞P可以直接按網(wǎng)格取;
假定棋盤正好在x-y平面上,這樣z值直接取0,簡(jiǎn)化初始化步驟。
mgrid把列向量[0:cbraw]復(fù)制了cbcol列,把行向量[0:cbcol]復(fù)制了cbraw行。
轉(zhuǎn)置reshape后,每行都是4×6網(wǎng)格中的某個(gè)點(diǎn)的坐標(biāo)。
‘‘‘
objp[::2]?=?np.mgrid[0:w0:h].T.reshape(-12)
#?儲(chǔ)存棋盤格角點(diǎn)的世界坐標(biāo)和圖像坐標(biāo)對(duì)
objpoints?=?[]?#?在世界坐標(biāo)系中的三維點(diǎn)
imgpoints?=?[]?#?在圖像平面的二維點(diǎn)
#glob是個(gè)文件名管理工具
images?=?glob.glob(‘/home/fanfan/相機(jī)標(biāo)定/*.jpeg‘)
#對(duì)每張圖片,識(shí)別出角點(diǎn),記錄世界物體坐標(biāo)和圖像坐標(biāo)
for?fname?in?images:
????img?=?cv2.imread(fname)
????gray?=?cv2.cvtColor(imgcv2.COLOR_BGR2GRAY)
????#?找到棋盤格角點(diǎn)
?????#尋找角點(diǎn),存入corners,ret是找到角點(diǎn)的flag
????ret?corners?=?cv2.findChessboardCorners(gray?(wh)None)
????#?如果找到足夠點(diǎn)對(duì),將其存儲(chǔ)起來
????if?ret?==?True:
????????#執(zhí)行亞像素級(jí)角點(diǎn)檢測(cè)
????????cv2.cornerSubPix(graycorners(1111)(-1-1)criteria)
????????objpoints.append(objp)
????????imgpoints.append(corners)
????????#?將角點(diǎn)在圖像上顯示
????????#在棋盤上繪制角點(diǎn)只是可視化工具
????????cv2.drawChessboardCorners(img?(wh)?corners?ret)
?
評(píng)論
共有 條評(píng)論