images= glob.glob('./image/*.jpg') # print(images) for fname in images: img = cv2.imread(fname) gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # Find the chess board corners # If desired number of corners are found in the image then ret = true ret, corners = cv2.findChessboardCorners(gray, CHECKERBOARD, cv2.CALIB_CB_ADAPTIVE_THRESH + cv2.CALIB_CB_FAST_CHECK + cv2.CALIB_CB_NORMALIZE_IMAGE) """ If desired number of corner are detected, we refine the pixel coordinates and display them on the images of checker board """ if ret == True: objpoints.append(objp) # refining pixel coordinates for given 2d points. corners2 = cv2.cornerSubPix(gray, corners, (11, 11), (-1, -1), criteria) imgpoints.append(corners2) # Draw and display the corners img = cv2.drawChessboardCorners(img, CHECKERBOARD, corners2, ret) # cv2.imshow('img',img) # cv2.waitKey(0) cv2.destroyAllWindows() # h, w = np.array(img).shape[:2] h, w = img.shape[:2] """ Performing camera calibration by passing the value of known 3D points (objpoints) and corresponding pixel coordinates of the detected corners (imgpoints) """ ret, mtx, dist, rvecs, tvecs = cv2.calibrateCamera(objpoints, imgpoints, gray.shape[::-1], None, None) print("Camera matrix : \n") print(mtx) print("dist : \n") print(dist) print("rvecs : \n") print(rvecs) print("tvecs : \n") print(tvecs)这段代码有错误,请帮我找出来
时间: 2024-03-20 08:39:30 浏览: 144
vite vue3 import.meta.glob动态路由
这段代码存在一些错误,可能会导致出现你之前提到的错误。我列出了一些可能的问题:
1. 代码中没有定义CHECKERBOARD变量,需要在代码中加入如下语句定义CHECKERBOARD:
CHECKERBOARD = (6, 9)
2. 代码中没有定义objp变量,需要在代码中加入如下语句定义objp:
objp = np.zeros((1, CHECKERBOARD[0] * CHECKERBOARD[1], 3), np.float32)
objp[0, :, :2] = np.mgrid[0:CHECKERBOARD[0], 0:CHECKERBOARD[1]].T.reshape(-1, 2)
3. 可能存在一些图像无法找到所有的角点,导致ret为False。可以在代码中加入如下语句,跳过这些无法找到所有角点的图像:
if ret == False:
continue
4. 在调用calibrateCamera函数时,输入的第三个参数应该是图像的大小,而不是灰度图像的大小。可以将代码中的gray.shape[::-1]修改为img.shape[:2]。
修改后的代码如下所示:
```python
import numpy as np
import cv2
import glob
CHECKERBOARD = (6, 9)
objp = np.zeros((1, CHECKERBOARD[0] * CHECKERBOARD[1], 3), np.float32)
objp[0, :, :2] = np.mgrid[0:CHECKERBOARD[0], 0:CHECKERBOARD[1]].T.reshape(-1, 2)
objpoints = []
imgpoints = []
images = glob.glob('./image/*.jpg')
for fname in images:
img = cv2.imread(fname)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
ret, corners = cv2.findChessboardCorners(gray, CHECKERBOARD, cv2.CALIB_CB_ADAPTIVE_THRESH +
cv2.CALIB_CB_FAST_CHECK + cv2.CALIB_CB_NORMALIZE_IMAGE)
if ret == True:
objpoints.append(objp)
corners2 = cv2.cornerSubPix(gray, corners, (11, 11), (-1, -1), criteria)
imgpoints.append(corners2)
img = cv2.drawChessboardCorners(img, CHECKERBOARD, corners2, ret)
h, w = img.shape[:2]
ret, mtx, dist, rvecs, tvecs = cv2.calibrateCamera(objpoints, imgpoints, (w, h), None, None)
print("Camera matrix : \n")
print(mtx)
print("dist : \n")
print(dist)
print("rvecs : \n")
print(rvecs)
print("tvecs : \n")
print(tvecs)
```
希望以上修改可以帮到你,如果还有其他问题,可以随时问我。
阅读全文