Last active
November 15, 2024 05:01
-
-
Save NikaTsanka/af42eec7573a440926b0b9d9a5049a2a to your computer and use it in GitHub Desktop.
Camera Calibration
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import numpy as np | |
import cv2 | |
import glob | |
import yaml | |
#import pathlib | |
# termination criteria | |
criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 30, 0.001) | |
# prepare object points, like (0,0,0), (1,0,0), (2,0,0) ....,(6,5,0) | |
objp = np.zeros((7*7,3), np.float32) | |
objp[:,:2] = np.mgrid[0:7,0:7].T.reshape(-1,2) | |
# Arrays to store object points and image points from all the images. | |
objpoints = [] # 3d point in real world space | |
imgpoints = [] # 2d points in image plane. | |
images = glob.glob(r'images/*.jpg') | |
# path = 'results' | |
# pathlib.Path(path).mkdir(parents=True, exist_ok=True) | |
found = 0 | |
for fname in images: # Here, 10 can be changed to whatever number you like to choose | |
img = cv2.imread(fname) # Capture frame-by-frame | |
#print(images[im_i]) | |
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) | |
# Find the chess board corners | |
ret, corners = cv2.findChessboardCorners(gray, (7,7), None) | |
# If found, add object points, image points (after refining them) | |
if ret == True: | |
objpoints.append(objp) # Certainly, every loop objp is the same, in 3D. | |
corners2 = cv2.cornerSubPix(gray,corners,(11,11),(-1,-1),criteria) | |
imgpoints.append(corners2) | |
# Draw and display the corners | |
img = cv2.drawChessboardCorners(img, (7,7), corners2, ret) | |
found += 1 | |
cv2.imshow('img', img) | |
cv2.waitKey(500) | |
# if you want to save images with detected corners | |
# uncomment following 2 lines and lines 5, 18 and 19 | |
# image_name = path + '/calibresult' + str(found) + '.png' | |
# cv2.imwrite(image_name, img) | |
print("Number of images used for calibration: ", found) | |
# When everything done, release the capture | |
# cap.release() | |
cv2.destroyAllWindows() | |
# calibration | |
ret, mtx, dist, rvecs, tvecs = cv2.calibrateCamera(objpoints, imgpoints, gray.shape[::-1], None, None) | |
# transform the matrix and distortion coefficients to writable lists | |
data = {'camera_matrix': np.asarray(mtx).tolist(), | |
'dist_coeff': np.asarray(dist).tolist()} | |
# and save it to a file | |
with open("calibration_matrix.yaml", "w") as f: | |
yaml.dump(data, f) | |
# done |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Thank you nikita
Finally found someone that also saves to a file