예제 #1
0
def cv_stereoCal(boardSize, pathl, pathr):
    filelistl = cbm.getFilelist(pathl)
    filelistr = cbm.getFilelist(pathr)
    # 获得角点坐标
    imagePointsl, objectCornerls, imageSizel = cbm.findPoints(
        filelistl, boardSize)
    imagePointsr, objectCornerrs, imageSizer = cbm.findPoints(
        filelistr, boardSize)
    objectCorners = []

    for i in range(len(filelistl)):
        objectCorners.append(objectCornerls)
        imagePointsl[i] = imagePointsl[i].reshape((-1, 2))
        imagePointsr[i] = imagePointsr[i].reshape((-1, 2))
    # 获得camera matrix
    cml, dcl, rvls, tvls = cbm.cv_calibrate(imagePointsl, objectCornerls,
                                            imageSizel)
    cmr, dcr, rvrs, tvrs = cbm.cv_calibrate(imagePointsr, objectCornerrs,
                                            imageSizer)
    # 进行stereoCal,获得R,T,E,F

    retval, cameraMatrix1, distCoeffs1, cameraMatrix2, distCoeffs2, R, T, E, F = cv.stereoCalibrate(
        objectCorners,
        imagePointsl,
        imagePointsr,
        cml,
        dcl,
        cmr,
        dcr,
        imageSizel,
        flags=cv.CALIB_FIX_INTRINSIC)
    #返回计算结果
    return cameraMatrix1, distCoeffs1, cameraMatrix2, distCoeffs2, R, T, E, F, imageSizel
예제 #2
0
def singleCal(boardSize):
    if DEBUG==1:
        filelist = ccbm.getFilelist('./img/left')
    else:
        dirname = tkinter.filedialog.askdirectory(initialdir='./', title="请选择图片文件夹")
        filelist = ccbm.getFilelist(dirname)
        if (len(filelist) < 3):
            print("提供的图片数目过少,请至少保证有3张图片!")
            os._exit(-1)
    ccbm.main(boardSize,filelist)
예제 #3
0
def main(boardSize, pathl, pathr):
    leftMaps, rightMaps, Rl, Rr, Pl, Pr, Q = getMaps(boardSize, pathl, pathr)
    filelist1 = ccb.getFilelist(pathl)
    filelist2 = ccb.getFilelist(pathr)
    file1 = filelist1[int(len(filelist1) / 2)]
    file2 = filelist2[int(len(filelist2) / 2)]
    check(boardSize, leftMaps, rightMaps, file1, file2)
    if not os.path.exists('./result/'):
        os.mkdir('./result/')
    np.savetxt("./result/rectify.txt", (Rl, Rr, Pl, Pr, Q), '%s', ',', '\n')
예제 #4
0
def zhangCalibrateCamera(imagePoints, objectCorners):
    # 计算单应矩阵
    H = homographys(imagePoints, objectCorners)
    # 计算V矩阵
    V = getV(H)
    # 计算相机内参
    cameraMatirx = getCameraMatrix(V)
    # 计算旋转、位移向量
    RTvecs, rmat, tvecs = getRtvecs(H, cameraMatirx)
    # 计算旋转、位移向量
    disCoeffs = getDisCoeffs(cameraMatirx, imagePoints, objectCorners, RTvecs)
    # 将位移矩阵转化为向量
    rvecs = ramt2rvecs(rmat)
    return cameraMatirx, disCoeffs, rvecs, tvecs


def main(boardSize, filelist):
    imagePoints, objectCorners, imageSize = ccb.findPoints(filelist, boardSize)
    cameraMatirx, disCoeffs, rvecs, tvecs = ccb.cv_calibrate(
        imagePoints, objectCorners, imageSize)
    zcameraMatirx, zdisCoeffs, zrvecs, ztvecs = zhangCalibrateCamera(
        imagePoints, objectCorners)
    ccb.save('./result/compare/opencv', cameraMatirx, disCoeffs, rvecs, tvecs)
    ccb.save('./result/compare/zhang', zcameraMatirx, zdisCoeffs, zrvecs,
             ztvecs)


if __name__ == "__main__":
    filelist = ccb.getFilelist('../img/left')
    main((6, 9), filelist)
예제 #5
0
def singleCal(boardSize, path):
    filelist = cbm.getFilelist(path)
    imagePoints, objectCorners, imageSize = cbm.findPoints(filelist, boardSize)
    cameraMatirx, disCoeffs, rvecs, tvecs = cbm.cv_calibrate(
        imagePoints, objectCorners, imageSize)
    return cameraMatirx, disCoeffs, rvecs, tvecs