參考資料:相機(jī)標(biāo)定(4) 矯正畸變 undistort()和initUndistortRectifyMap()
背景:opencv提供了直接進(jìn)行畸變矯正的代碼,因在項(xiàng)目中需要使用畸變矯正,因此研究一下opencv中畸變矯正的相關(guān)接口與代碼,便于學(xué)習(xí)提升與二次開(kāi)發(fā)。
1、畸變矯正原理
opencv在文檔中對(duì)相機(jī)標(biāo)定與畸變矯正的原理做了簡(jiǎn)單介紹,可參考鏈接:opencv的標(biāo)定與3d重建模塊文檔鏈接,此外網(wǎng)上也有較多的內(nèi)容對(duì)畸變矯正原理進(jìn)行了講解,因此本文在此不做詳細(xì)介紹。
?2、opencv提供的畸變矯正接口
opencv提供了可以直接使用的矯正算法,即通過(guò)cv::calibrateCamera?得到內(nèi)參與畸變系數(shù),然后使用cv::undistort?函數(shù)一次性完成圖像的畸變矯正;也可以通過(guò)initUndistortRectifyMap()和remap()的組合來(lái)處理。
1)initUndistortRectifyMap()
void cv::initUndistortRectifyMap ( InputArray cameraMatrix,
InputArray distCoeffs,
InputArray R,
InputArray newCameraMatrix,
Size size,
int m1type,
OutputArray map1,
OutputArray map2
)
-
cameraMatrix
:相機(jī)矩陣,包含相機(jī)的內(nèi)部參數(shù)(焦距、光心等)。 -
distCoeffs
:畸變系數(shù),用于描述相機(jī)的畸變情況(徑向畸變和切向畸變)。 -
R
:校正變換矩陣,用于將輸入圖像校正為校正后的輸出圖像。 -
newCameraMatrix
:校正后的相機(jī)矩陣,可以自定義或者使用校正變換矩陣生成。 -
size
:輸出圖像的尺寸。 -
m1type
:輸出映射表map1
的數(shù)據(jù)類(lèi)型。 -
map1
和map2
:輸出的映射表,存儲(chǔ)輸入圖像到輸出圖像的像素坐標(biāo)映射關(guān)系。
作用說(shuō)明:函數(shù)的作用是根據(jù)相機(jī)的內(nèi)部參數(shù)、畸變系數(shù)、校正變換矩陣和輸出圖像的尺寸等信息,計(jì)算出一個(gè)映射表,其中包含了每個(gè)輸入圖像像素對(duì)應(yīng)的輸出圖像位置。通過(guò)這個(gè)映射表,可以將輸入圖像中的像素根據(jù)校正后的映射關(guān)系重構(gòu)成校正后的輸出圖像,從而實(shí)現(xiàn)相機(jī)畸變的校正。
2)remap()
cv::remap是重映射函數(shù),通常用來(lái)糾正校準(zhǔn)的立體圖像。參考:OpenCV圖像處理——重映射 remap函數(shù)
3)cv::undistort
void cv::undistort ( InputArray src,
OutputArray dst,
InputArray cameraMatrix,
InputArray distCoeffs,
InputArray newCameraMatrix = noArray()
)
-
src
:輸入圖像,可以是單通道或多通道的圖像。 -
dst
:輸出圖像,校正后的圖像將存儲(chǔ)在此處。 -
cameraMatrix
:相機(jī)矩陣,包含相機(jī)的內(nèi)部參數(shù)(焦距、光心等)。 -
distCoeffs
:畸變系數(shù),用于描述相機(jī)的畸變情況(徑向畸變和切向畸變)。 -
newCameraMatrix
:校正后的相機(jī)矩陣,可以自定義或者使用默認(rèn)值noArray()
。如果指定了新的相機(jī)矩陣,函數(shù)將根據(jù)新相機(jī)矩陣對(duì)圖像進(jìn)行校正;否則,將使用原始相機(jī)矩陣進(jìn)行校正。
作用說(shuō)明:函數(shù)的作用是根據(jù)提供的相機(jī)參數(shù),對(duì)輸入圖像直接進(jìn)行相機(jī)畸變校正。
4)cv::undistortPoints
?
上面介紹的都是對(duì)整張圖像進(jìn)行畸變矯正,這樣子實(shí)際上是比較慢的,我在項(xiàng)目中實(shí)際遇到的也是對(duì)幾個(gè)像素點(diǎn)的畸變矯正,經(jīng)過(guò)查找發(fā)現(xiàn)有這個(gè)函數(shù)。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-693924.html
void cv::undistortPoints ( InputArray src,
OutputArray dst,
InputArray cameraMatrix,
InputArray distCoeffs,
InputArray R = noArray(),
InputArray P = noArray()
)
-
src
:輸入的像素點(diǎn)坐標(biāo),可以是一個(gè)N x 1
或1 x N
的矩陣,表示N
個(gè)像素點(diǎn)。 -
dst
:輸出的校正后的像素點(diǎn)坐標(biāo),校正后的像素點(diǎn)將存儲(chǔ)在此處,與輸入矩陣具有相同的維度和類(lèi)型。 -
cameraMatrix
:相機(jī)矩陣,包含相機(jī)的內(nèi)部參數(shù)(焦距、光心等)。 -
distCoeffs
:畸變系數(shù),用于描述相機(jī)的畸變情況(徑向畸變和切向畸變)。 -
R
:旋轉(zhuǎn)矩陣,可選參數(shù),默認(rèn)值為noArray()
。如果指定了旋轉(zhuǎn)矩陣,函數(shù)將根據(jù)旋轉(zhuǎn)矩陣對(duì)像素點(diǎn)進(jìn)行校正;否則,將不考慮旋轉(zhuǎn)變換。 -
P
:投影矩陣,可選參數(shù),默認(rèn)值為noArray()
。如果指定了投影矩陣,函數(shù)將根據(jù)投影矩陣對(duì)像素點(diǎn)進(jìn)行校正;否則,將不考慮投影變換。
3、源碼學(xué)習(xí)
先休息了,明天接著寫(xiě)文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-693924.html
到了這里,關(guān)于opencv圖像畸變矯正:源碼學(xué)習(xí)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!