Opencv 相机校准:我需要使用标志吗?

问题描述

我正在为将用于抓取的机械臂进行相机校准。请注意,我在单独校准每个相机和立体校准期间没有使用任何标志。这是进行并获得准确结果的正确方法吗?谢谢 代码如下:

import numpy as np
import cv2
import glob

# termination criteria
criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER,30,0.001)

# prepare object points,like (0,0),(1,(2,0) ....,(6,5,0)
objp = np.zeros((12*12,3),np.float32)
objp[:,:2] = np.mgrid[0:12,0:12].T.reshape(-1,2)*26 #multiply by length of squares 


# Arrays to store object points and image points from all the images.
objpointsL = [] # 3d point in real world space
imgpointsL = [] # 2d points in image plane.
objpointsR = []
imgpointsR = []

images = glob.glob('Imageleft*tif')

for fname in images:
    img = cv2.imread(fname)
    grayL = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

    # Find the chess board corners
    ret,cornersL = cv2.findChessboardCorners(grayL,(12,12),None)
    # If found,add object points,image points (after refining them)
    if ret == True:
        objpointsL.append(objp)

        cv2.cornerSubPix(grayL,cornersL,(11,11),(-1,-1),criteria)
        imgpointsL.append(cornersL)
        img = cv2.drawChessboardCorners(img,ret)
        cv2.imshow('imgL',img)
        cv2.waitKey(500)

images = glob.glob('Imageright*.tif')

for fname in images:
    img = cv2.imread(fname)
    grayR = cv2.cvtColor(img,cornersR = cv2.findChessboardCorners(grayR,None)

    # If found,image points (after refining them)
    if ret == True:
        objpointsR.append(objp)

        cv2.cornerSubPix(grayR,cornersR,criteria)
        imgpointsR.append(cornersR)
        img = cv2.drawChessboardCorners(img,ret)
        cv2.imshow('imgR',img)
        cv2.waitKey(500)


ret1,mtx1,dist1,rvecs1,tvecs1= cv2.calibrateCamera(objpointsL,imgpointsL,grayL.shape[::-1],None,None)
ret2,mtx2,dist2,rvecs2,tvecs2= cv2.calibrateCamera(objpointsR,imgpointsR,grayR.shape[::-1],None)
retval,cameraMatrix1,distCoeffs1,cameraMatrix2,distCoeffs2,R,T,E,F = cv2.stereoCalibrate(objpointsL,None)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)