- import numpy as np
- import yaml as yml
- import cv2
- RowCorner = 11
- ColCorner = 17
- GridX = 50
- GridY = 50
- criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 30, 0.001)
- img = cv2.imread("C:\\Users\\Criss\\Desktop\\Calib1.bmp")
- cv2.imshow('calib', img)
- cv2.waitKey(0)
- gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
- cv2.imshow('gray', gray)
- cv2.waitKey(0)
- ret,corners = cv2.findChessboardCorners(gray, (ColCorner, RowCorner), 1+2+8)
- cv2.waitKey(0)
- objp = np.zeros((ColCorner*RowCorner, 3), np.float32)
- objp[:, :2] = np.mgrid[0:ColCorner*GridX:GridX, 0:RowCorner*GridY:GridY].T.reshape(-1, 2)
- objpoints = []
- imgpoints = []
- if ret == True:
- objpoints.append(objp)
- corner2 = cv2.cornerSubPix(gray, corners, (11, 11),(-1, -1), criteria)
- imgpoints.append(corner2)
- cv2.drawChessboardCorners(img, (ColCorner, RowCorner), corner2, ret)
- cv2.namedWindow('gray', cv2.WINDOW_NORMAL)
- cv2.imshow('gray', img)
- cv2.waitKey()
- ret, mtx, dist, rvecs, tvecs = cv2.calibrateCamera(objpoints, imgpoints, gray.shape[::-1], None, None)
- cv2.waitKey()
- img1 = cv2.imread("C:\\Users\\Criss\\Desktop\\Calib.bmp")
- h, w = img1.shape[:2]
- newcameramtx, roi = cv2.getOptimalNewCameraMatrix(mtx, dist, (w, h), 1, (w, h))
- cv2.waitKey()
- # 保存结果
- calib = {'matx': mtx, 'dist': dist}
- f = open(r'Calib.yaml', 'w')
- print(yml.dump(calib, f))
- # undistort
- dst = cv2.undistort(img1, mtx, dist, None, newcameramtx)
- # crop the image
- x, y, w, h = roi
- dst = dst[y:y+h, x:x+w]
- cv2.imshow('undistort', dst)
- cv2.waitKey()
- cv2.imwrite('calibresult.png', dst)
复制代码
官方指导文档:https://docs.opencv.org/4.5.0/d4 ... ra_calibration.html
|