手把手教會(huì)你雙目攝像頭Matlab參數(shù)定標(biāo)
一、前期準(zhǔn)備
1、安裝好python3,可以在anaconda中安裝python3。
2、一個(gè)合適的雙目攝像頭。
3、一臺(tái)可以運(yùn)行Matlab的電腦。
4、一張棋盤圖(可A4打印,若效果不佳,則可A3打印)。
棋盤圖如下圖所示:需要測量小方框的邊長(一般單位為毫米:mm)。

二、使用雙目攝像頭(左+右)拍攝棋盤圖
1、注意事項(xiàng)
注意:
1、左、右攝像頭圖像中必須包含單獨(dú)的完整的棋盤圖。
2、可適當(dāng)前后、左右、上下翻轉(zhuǎn)棋盤圖,在符合上述條件1的情況下。
3、拍攝左右雙目的照片40~50張比較合適。
如圖所示:


2、雙目拍照代碼(python)
take_photo.py內(nèi)容如下:
import cv2
import sys
#引入庫
cap = cv2.VideoCapture(1) #讀取筆記本內(nèi)置攝像頭或者0號(hào)攝像頭
i = 0
while True:
ret, frame = cap.read()
if (ret):
cv2.namedWindow("Video01",0) #創(chuàng)建一個(gè)名為Video01的窗口,0表示窗口大小可調(diào)
#cv2.resizeWindow("Video01",1280,720) ##創(chuàng)建一個(gè)名為Video01的窗口,設(shè)置窗口大小為 1920 * 1080 與上一個(gè)設(shè)置的 0 有沖突
cv2.imshow("Video01", frame)
#等待按鍵按下
c = cv2.waitKey(1) & 0xff
#r若按下w則保存一張照片
if c ==ord("w"):
cv2.imwrite("./val_001/%d.bmp" %i, frame) #自己設(shè)置拍攝的照片的存儲(chǔ)位置
print("Save images %d succeed!" %i)
i+=1
#若按下Q鍵,則退出循環(huán)
if c == ord("q"):
break
#隨時(shí)準(zhǔn)備按q退出
cap.release()
#關(guān)掉所有窗口
cv2.destroyAllWindows()
注意:
1、運(yùn)行take_photo.py前,注意設(shè)置左右照片的存儲(chǔ)位置。
2、運(yùn)行take_photo.py后,按下鍵盤上的“W”鍵拍攝一張照片。當(dāng)拍攝的照片數(shù)量足夠時(shí),按下“Q”鍵退出程序運(yùn)行。
3、程序退出后,打開存儲(chǔ)照片的文件夾查看照片是否合適。
3、雙目左右照片分割(python)
resize.py內(nèi)容如下:
import numpy as np
import cv2
#img1 = cv2.imread(r"/Users/inbc/Desktop/zuo/Left1.bmp")
#img2 = cv2.imread(r"/Users/inbc/Desktop/you/Right1.bmp")
for i in range(0,7) :
#imgT = cv2.imdecode(np.fromfile('./images/%d.bmp' %i ,dtype=np.uint8), -1)
imgT = cv2.imdecode(np.fromfile('./val/%d.bmp' %i ,dtype=np.uint8), -1) #讀取拍攝的左右雙目照片
# cv2.imshow("zuo", img1[300:1200, 500:2000])
# cv2.imshow("you", img2[300:1200, 500:2000])
# cv2.waitKey(0)
#設(shè)置左右照片的存儲(chǔ)位置
cv2.imwrite("./val/zuo/reLeft%d.bmp" %i ,imgT[0:720, 0:1280] )#imgL的第一個(gè)參數(shù)是圖片高度像素范圍,第二個(gè)參數(shù)是圖片寬度的像素范圍
cv2.imwrite("./val/you/reRight%d.bmp" %i ,imgT[0:720, 1280:2560] )
print("Resize images%d Fnished!" %i)
print("Fnished All!!!")
注意:
1、運(yùn)行resize.py前,注意設(shè)置左、右照片的分別的存儲(chǔ)位置。
2、運(yùn)行resize.py后,終端打印"Fnished All!!!"表示分割完成。
3、程序退出后,打開存儲(chǔ)照片的文件夾查看照片,是否分割完成,左攝像頭照片存放在zuo,右攝像頭照片存放在you。(文件名可自己更改)
三、Matlab雙目參數(shù)標(biāo)定
1、打開Matlab后,點(diǎn)開app,找到Stereo Camera Calibrator。如下圖所示:

打開后如圖所示:

2、導(dǎo)入雙目的左右照片到Stereo Camera CalibratorAPP。具體操作,如下圖所示:

3、點(diǎn)擊確認(rèn)后就可以分析導(dǎo)入的左右的照片了。這個(gè)過程會(huì)自動(dòng)剔除掉不合格(誤差過大)的左右照片。

4、導(dǎo)入照片后就可以進(jìn)行雙目定標(biāo)了。
導(dǎo)入左右照片后,如圖所示:

5、設(shè)置雙目相機(jī)的定標(biāo)參數(shù),如圖所示。

6、進(jìn)行雙目定標(biāo),并導(dǎo)出雙目參數(shù)矩陣到Matlab中,進(jìn)行下一步的處理。

四、雙目參數(shù)提取
1、左、右相機(jī)內(nèi)參數(shù)獲取,注意參數(shù)矩陣的轉(zhuǎn)置:
>> stereoParams.CameraParameters1.IntrinsicMatrix'#左相機(jī)參數(shù)
ans =
831.0889 -4.0855 659.4243
0 831.8663 487.3259
0 0 1.0000
>> stereoParams.CameraParameters2.IntrinsicMatrix'#右相機(jī)參數(shù)
ans =
831.1982 -3.5773 632.5308
0 832.1221 479.3084
0 0 1.0000
Matlab如圖所示:

2、獲取左右相機(jī)畸變系數(shù)。
注意: 左右相機(jī)畸變系數(shù):[k1, k2, p1, p2, k3] ,順序要正確。
# 左右相機(jī)畸變系數(shù):[k1, k2, p1, p2, k3] >> stereoParams.CameraParameters1.RadialDistortion ans = -0.0806 0.3806 -0.5229 #k1 k2 k3 >> stereoParams.CameraParameters1.TangentialDistortion ans = -0.0033 0.0005 #p1 p2
Matlab如圖所示:

3、獲取雙目的旋轉(zhuǎn)矩陣和平移矩陣,注意旋轉(zhuǎn)矩陣的轉(zhuǎn)置。
# 旋轉(zhuǎn)矩陣
>> stereoParams.RotationOfCamera2'
ans =
1.0000 0.0017 -0.0093
-0.0018 1.0000 -0.0019
0.0093 0.0019 1.0000
# 平移矩陣
>> stereoParams.TranslationOfCamera2
ans =
-119.9578 0.1121 -0.2134
Matlab如圖所示:

4、獲取基線距離,單位:mm, 為平移向量的第一個(gè)參數(shù)(取絕對(duì)值)。
self.baseline = 119.9578 # 單位:mm, 為平移向量的第一個(gè)參數(shù)(取絕對(duì)值)
至此,雙目攝像頭的參數(shù)就定標(biāo)完了。
耐心一點(diǎn),慢慢來總會(huì)成功的?。?!
總結(jié)
到此這篇關(guān)于雙目攝像頭Matlab參數(shù)定標(biāo)的文章就介紹到這了,更多相關(guān)雙目攝像頭Matlab參數(shù)定標(biāo)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解vscode實(shí)現(xiàn)遠(yuǎn)程linux服務(wù)器上Python開發(fā)
這篇文章主要介紹了vscode實(shí)現(xiàn)遠(yuǎn)程linux服務(wù)器上Python開發(fā),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-11-11
Python實(shí)現(xiàn)爬取房源信息的示例詳解
站在一個(gè)租房人的立場,租房平臺(tái)實(shí)在太多了,并且各平臺(tái)篩選和排序邏輯都不太一致。這篇文章將教教大家如何利用Python語言實(shí)現(xiàn)爬取房源信息,需要的可以參考一下2022-09-09
詳解Python如何利用pymysql封裝項(xiàng)目通用的連接和查詢
一個(gè)項(xiàng)目通常都需要有數(shù)據(jù)庫,本文就來為大家詳細(xì)講講Python如何利用pymysql簡單分裝一個(gè)通用的連接,關(guān)閉和查詢,需要的可以參考一下2022-07-07
Python?Excel數(shù)據(jù)處理之xlrd/xlwt/xlutils模塊詳解
在復(fù)雜的Excel業(yè)務(wù)數(shù)據(jù)處理中,三兄弟扮演的角色缺一不可。如何能夠使用xlrd/xlwt/xlutils三個(gè)模塊來實(shí)現(xiàn)數(shù)據(jù)處理就是今天的內(nèi)容,希望對(duì)大家有所幫助2023-03-03
Python打包文件執(zhí)行報(bào)錯(cuò):ModuleNotFoundError: No module 
這篇文章給大家介紹了Python打包文件執(zhí)行報(bào)錯(cuò):ModuleNotFoundError: No module named ‘pymssql‘的解決方法,如果有遇到相同問題的朋友可以參考閱讀一下本文2023-10-10

