基於python opencv單目相機標定的示例代碼

相機固定不動,通過標定版改動不同方位的位姿進行抓拍

import cv2
camera=cv2.VideoCapture(1)
i = 0
while 1:
    (grabbed, img) = camera.read()
    cv2.imshow('img',img)
    if cv2.waitKey(1) & 0xFF == ord('j'):  # 按j保存一張圖片
        i += 1
        u = str(i)
        firename=str('./img'+u+'.jpg')
        cv2.imwrite(firename, img)
        print('寫入:',firename)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

將抓拍好的圖片存放程序的同一級目錄下 運行標定代碼如下:

# 相機標定
import cv2
# 修改目錄
# 首先讀取圖像並轉為灰度圖
img = cv2.imread('c1.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# cv2.imshow("img",img)
# cv2.imshow("gray",gray)
# 使用OpenCV的cv2.findChessboardCorners()函數找出棋盤圖中的對角(即圖片中黑白相對的點的坐標),
# 同時使用cv2.drawChessboardCorners()將之畫出來
# cv2.findChessboardCorners參數patternSize取(9,5)--棋盤圖中每行和每列交點的個數
# 其原因在於導入的圖片./camera_cal/calibration1.jpg數一下交點的數目,一行有9個,一列有5個
# Adam博客當中取(9,6)原因在於他的圖和我的圖不一樣,認真數一下可以發現他的圖確實是一行9個一列6個角點
# 事實證明,可以取任何隻要在size小於圖片中的交點數即可
# 函數解析參見官網https://docs.opencv.org/3.3.0/dc/dbb/tutorial_py_calibration.html
# It returns the corner points and retval which will be True if pattern is obtained.
# These corners will be placed in an order (from left-to-right, top-to-bottom)
ret, corners = cv2.findChessboardCorners(gray, (9, 5),None)
print(ret)
print(corners)  # 交點坐標
if ret == True:
    img = cv2.drawChessboardCorners(img, (9, 5), corners, ret)
cv2.imshow("final",img)
cv2.waitKey()
cv2.destroyAllWindows()

到此這篇關於基於python opencv單目相機標定的文章就介紹到這瞭,更多相關python opencv相機標定內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: