Je travaille sur un programme d'étalonnage de caméra utilisant l'exemple OpenCV/Python (de: OpenCV Tutorials) comme guide.Étalonnage de la caméra avec OpenCV - Comment ajuster la taille du carré de l'échiquier?
Question: Comment adapter ce code par exemple pour tenir compte de la taille d'un carré sur un damier en particulier? Ma compréhension du processus d'étalonnage de la caméra est que cette information doit en quelque sorte être utilisé autrement les valeurs données par:
cv2.calibrateCamera()
sera incorrect.
Voici la partie de mon code qui lit dans les fichiers image et parcourt le processus d'étalonnage pour produire la matrice de la caméra et d'autres valeurs.
#import cv2
#import numpy as np
#import glob
"""
Corner Finding
"""
# 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), ....,(6,5,0)
objp = np.zeros((5*5,3), np.float32)
objp[:,:2] = np.mgrid[0:5,0:5].T.reshape(-1,2)
# Arrays to store object points and image points from all images
objpoints = []
imgpoints = []
counting = 0
# Import Images
images = glob.glob('dir/sub dir/Images/*')
for fname in images:
img = cv2.imread(fname) # Read images
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # Convert to grayscale
# Find the chess board corners
ret, corners = cv2.findChessboardCorners(gray, (5,5), None)
# if found, add object points, image points (after refining them)
if ret == True:
objpoints.append(objp)
cv2.cornerSubPix(gray, corners, (11,11), (-1,-1), criteria)
imgpoints.append(corners)
#Draw and display corners
cv2.drawChessboardCorners(img, (5,5), corners, ret)
counting += 1
print str(counting) + ' Viable Image(s)'
cv2.imshow('img', img)
cv2.waitKey(500)
cv2.destroyAllWindows()
# Calibrate Camera
ret, mtx, dist, rvecs, tvecs = cv2.calibrateCamera(objpoints, imgpoints, gray.shape[::-1],None,None)
Les points sont vos points d'échiquier dans l'espace 3D. ils sont probablement (0,0), (0,1), (1,1), (1,0); (2,0); Dans cet exemple, la taille du carré (et la longueur du bord) est de 1. Il suffit de redimensionner ces positions pour obtenir une autre taille carrée – Micka
@Micka Donc, si mon échiquier a des carrés d'une moyenne de 25,3 mm, ces valeurs devraient) (0,0,0253): ....? –
exactement. Ou '(0, 25.3)' si vous préférez que votre unité de coordonnées 3D (et de caméra intrinsèque) soit '[mm]'. – Micka