1.百度上找半天各種标定的方法,然而複制代碼下來各種報錯,或者就是沒講清楚到底怎麼操作。
後來我突然想到opencv自帶的例程說不到也有标定的代碼,很幸運在sample/python/下找到了calibrate.py這個程式。
打開後裡面有如下代碼:
'''
camera calibration for distorted images with chess board samples
reads distorted images, calculates the calibration and write undistorted images
usage:
calibrate.py [--debug <output path>] [--square_size] [<image mask>]
default values:
--debug: ./output/
--square_size: 2.4
<image mask> defaults to ../data/left*.jpg
找到了關鍵點:上面我複制的代碼的最後一行,這行說明,标定用的圖檔
儲存在sample/data檔案夾下,并且名字都為leftXX.jpg。進去後可以看到
有14張這樣命名的圖檔。這時很機智的按它圖檔的樣式列印了标定闆,并
拍下了14張圖檔,以同樣方式命名,接下來狸貓換太子,把自己攝像頭拍
的照片放到data檔案夾下,把它的替換掉。第二步,把square_size後面的
數字1.0換成标定闆上方塊的實際長寬。這裡機關是cm。
到此,可達鴨眼睛一眨,發現事情并沒完。
重新打開python檔案夾下的calibrate.py檔案,裡面代碼如下:
square_size = float(args.get('--square_size'))
pattern_size = (9,6)
pattern_points = np.zeros((np.prod(pattern_size), 3), np.float32)
我複制的代碼第二行pattern_size,這是指你拍的圖檔中的點的個數,如果你不知道
怎麼數,你就看一下它原來的圖檔每一行有幾個點,豎着有幾個點,與這個size對比
一下就知道該數哪些點了。
然後把你标定闆上點的數量填到這個函數裡,至此,完事。
在終端裡python calibrate.py就完事了。
驗證标定成功的幾個方法:
1.檢查output檔案夾下的leftXX_undistorted.png。觀察裡面
的直線是不是非常直,而在原來的圖檔中的直線是不是有點彎。
2.檢視終端的輸出資訊,如果fx 接近于fy,幾乎相等或者就是相等,那基本就是标定正确了。
這個是我在ubuntu下操作的,在win10下我不懂怎麼搞,但我估計大同小異,應該也是可以的。
如果python編譯calibrate.py出現錯誤的話,那肯定是你沒用python編譯過opencv,有些庫沒裝。
本文來源于微信公衆号“ CV技術指南 ” 。更多内容與最新技術動态盡在公衆号釋出。
歡迎掃描下方二維碼關注公衆号“CV技術指南”,主要進行計算機視覺方向的論文解讀,最新技術跟蹤,以及CV技術的總結。
原創文章第一時間在公衆号中更新,部落格隻在有空時間才更新少量公衆号文章
