攝像機標定是計算機視覺領域中的一項重要任務,它的目的是校準相機成像的幾何特性,使得在不同角度、距離和環境下,相機所拍攝的圖像能夠正確地表示物體的真實尺寸和位置。在Python中,我們可以使用OpenCV庫來實現相機標定。
import numpy as np import cv2 #讀取標定板圖像 img = cv2.imread('calibration.jpg') #設置標定板大小 pattern_size = (7,6) #提取標定板角點 criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 30, 0.001) gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) ret, corners = cv2.findChessboardCorners(gray, pattern_size, None) if ret == True: corners2 = cv2.cornerSubPix(gray,corners,(11,11),(-1,-1),criteria) #繪制標定板角點 cv2.drawChessboardCorners(img, pattern_size, corners2, ret) #標定相機 objp = np.zeros((pattern_size[0]*pattern_size[1],3), np.float32) objp[:,:2] = np.mgrid[0:pattern_size[0],0:pattern_size[1]].T.reshape(-1,2) objpoints = [] imgpoints = [] objpoints.append(objp) imgpoints.append(corners2) ret, mtx, dist, rvecs, tvecs = cv2.calibrateCamera(objpoints, imgpoints, gray.shape[::-1],None,None) #保存標定結果 calibration_data = {'camera_matrix': mtx, 'dist_coeff': dist} np.save('calibration_data.npy', calibration_data) #使用標定結果對圖像進行矯正 undistorted = cv2.undistort(img, mtx, dist) #顯示原始圖像和矯正后的圖像 cv2.imshow('original', img) cv2.imshow('undistorted', undistorted) cv2.waitKey(0) cv2.destroyAllWindows()
上述代碼中,我們首先讀取標定板圖像,并通過cv2.findChessboardCorners()
函數提取出標定板的角點。然后,我們使用標定板的角點作為輸入,調用cv2.calibrateCamera()
函數來計算相機的內參矩陣和畸變系數。最后,我們使用cv2.undistort()
函數來將標定結果應用到原始圖像上,得到矯正后的圖像。
上一篇MySQL創建一個表的
下一篇vue cdn 資源