2017-03-16 134 views
0

我想使用的OpenCV的initUndistortRectifyMap()函數來創建一個映射undistorts魚眼圖像,如this tutorial什麼是OpenCV中的UndistortRectifyMap()m1type參數

教程中介紹了此行的代碼:

mapx,mapy = cv2.initUndistortRectifyMap(mtx,dist,None,newcameramtx,(w,h),5) 

但是,當我的腳本到達這條線,下面的錯誤被拋出:

OpenCV的errror:斷言失敗(m1type == CV_16SC2 || m1type == CV_32FC1 || m1type == CV32FC2)在initUndistortedRectifyMap,文件 /hdd/buildbot/slave_jetson_tx_3/35-04T-L4T-R24/opencv/modules/imgproc/src/undistort.cpp

的錯誤的來源看來是最後一個參數中的'5',根據documentation,這是'm1type - 第一個輸出映射的類型,可以是CV_32FC1或CV_16SC2。「這些不同類型的含義是什麼,我怎麼知道我的程序的正確價值?

(注:我知道cv2.undistort()函數,但它不爲我的目的使用。)

回答

1

斷言指出m1type必須是一個:CV_16SC2CV_32FC1CV_32FC2,你通過它作爲5。這些常數作爲OpenCV的2的積分值被映射爲

CV_16SC2 - 11

CV_32FC1 - 5

CV_32FC2 - 13

這就是爲什麼在文檔中你提交人已使用5來表示CV_32FC1,但這是一個不好的選擇,您必須使用CV_32FC1mat.type()來獲取墊的類型,並避免使用任何這樣的數字常量。

0

我混亂的一部分是關於'm1型'。這是指存儲在OpenCV的Mat對象中的值的類型。名稱的格式如下:
CV_[The number of bits per item][Signed or Unsigned][Type Prefix]C[The channel number]source

因此,例如, 'CV_16SC2' 是16位,簽字,和2個信道。

相關問題