Python “如何修复”;TypeError:函数只接受2个参数(给定3个)";在cv2.1中,校准MERA方法

Python “如何修复”;TypeError:函数只接受2个参数(给定3个)";在cv2.1中,校准MERA方法,python,opencv,camera-calibration,Python,Opencv,Camera Calibration,我对下面的代码有问题。编译后,出现消息“ret、mtx、dist、rvecs、tvecs=cv2.calibleCamera(objectpoints、framepoints、fsize、None、None TypeError:函数只接受2个参数(给定3个)”。我想从我的网络摄像头实时拍摄图像 import numpy as np import cv2 objp = np.zeros((9 * 6, 3), np.float32) objp[:, :2] = np.mgrid[0:6, 0:

我对下面的代码有问题。编译后,出现消息“ret、mtx、dist、rvecs、tvecs=cv2.calibleCamera(objectpoints、framepoints、fsize、None、None TypeError:函数只接受2个参数(给定3个)”。我想从我的网络摄像头实时拍摄图像

import numpy as np
import cv2


objp = np.zeros((9 * 6, 3), np.float32)
objp[:, :2] = np.mgrid[0:6, 0:9].T.reshape(-1, 2)
size = (9, 6)

objectpoints = []
framepoints = []

cv2.namedWindow("video preview")
vc = cv2.VideoCapture(0)

fourcc = cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter('output.avi', fourcc, 20.0, (1080, 720))

if vc.isOpened():
    rval, frame = vc.read()
else:
rval = False

while rval:
    cv2.imshow("preview", frame)
    rval, frame = vc.read()
    ret, corners = cv2.findChessboardCorners(frame, size, None)
    cv2.drawChessboardCorners(frame, (9, 6), corners, ret)
    print(ret)
    print(frame.shape[::-1])
    fsize = frame.shape[::-1]

    if ret == True:
        criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 30, 0.001)
    objectpoints.append(objp)
    corners2 = cv2.cornerSubPix(frame, corners, (11, 11), (-1, -1), criteria)
    framepoints.append(corners2)

ret, mtx, dist, rvecs, tvecs = cv2.calibrateCamera(objectpoints, framepoints, fsize, None, None)
print('ret:', ret)
print('mtx:', mtx)
print('dist:', dist)
print('rvecs:', rvecs)
print('tvecs:', tvecs)

out.write(frame)

key = cv2.waitKey(20)
if key == 27:
    break

vc.release()
out.release()
cv2.destroyWindow("preview")`

我遇到了同样的问题,并发现了问题:

将fsize作为img size参数传递,该参数需要一个2元素元组(宽度、高度)

但您从RGB img读取fsize,这会导致3个颜色通道的宽度、高度(3)。(如果打印(fsize),您将看到)

因此,您传递了一个3元组,其中需要一个2元组,这将导致错误

将您的行更改为:

fsize=frame.shape[:-1]

致:

fsize=frame.shape[1::-1]

它应该会起作用

还可以通过以下方式将帧转换为灰度:

frame=cv.cvt颜色(frame,cv.COLOR\u bgr2灰色)

使用chessboardcornerDetector哪一种可能更好(在本例中是这样使用的)


我希望这能有所帮助。

您还没有显示代码。请发布所有(相关)代码和完整的stacktrace。支票或支票。