DepthAI v2 has been superseded by DepthAI v3. You are viewing legacy documentation.
此页面由 AI 自动翻译。查看英文原版
DepthAI 教程
DepthAI API 参考

本页目录

  • 相机内参
  • 设置
  • 源代码

校准读取器

此示例演示了如何通过 XLink 读取设备上存储的校准数据。此示例将打印摄像机的外部和内部参数,以及设备上(EEPROM)写入的其他校准值。

类似示例

相机内参

校准还包含相机内参和外参。
Command Line
1import depthai as dai
2
3with dai.Device() as device:
4  calibData = device.readCalibration()
5  intrinsics = calibData.getCameraIntrinsics(dai.CameraBoardSocket.RIGHT)
6  print('右单目相机像素焦距:', intrinsics[0][0])
以下是像素焦距的理论计算:
Python
1f_x = width * (1 / (2 * math.tan((HFOV / 2) * (math.pi / 180))))
要获取 HFOV,您可以使用此脚本,该脚本也适用于广角摄像头,并允许您 指定 alpha 参数。对于 400P(640x400)相机分辨率,HFOV 为 71.9 度:
Code
1f_x_640 = 640 * (1 / (2 * math.tan((71.9 / 2) * (math.pi / 180))))  # = 441.25
对于 800P(1280x800)相机分辨率,HFOV 为 71.9 度:
Code
1f_x_1280 = 1280 * (1 / (2 * math.tan((71.9 / 2) * (math.pi / 180))))  # = 882.5

设置

请运行 安装脚本 以下载所有必需的依赖项。请注意,此脚本必须在 git 上下文中运行,因此您必须先下载 depthai-python 存储库,然后运行脚本
Command Line
1git clone https://github.com/luxonis/depthai-python.git
2cd depthai-python/examples
3python3 install_requirements.py
有关更多信息,请遵循 安装指南

源代码

Python

Python
GitHub
1#!/usr/bin/env python3
2
3import depthai as dai
4import numpy as np
5import sys
6from pathlib import Path
7
8# Connect Device
9with dai.Device() as device:
10    calibFile = str((Path(__file__).parent / Path(f"calib_{device.getMxId()}.json")).resolve().absolute())
11    if len(sys.argv) > 1:
12        calibFile = sys.argv[1]
13
14    calibData = device.readCalibration()
15    calibData.eepromToJsonFile(calibFile)
16
17    M_rgb, width, height = calibData.getDefaultIntrinsics(dai.CameraBoardSocket.CAM_A)
18    print("RGB Camera Default intrinsics...")
19    print(M_rgb)
20    print(width)
21    print(height)
22
23    if "OAK-1" in calibData.getEepromData().boardName or "BW1093OAK" in calibData.getEepromData().boardName:
24        M_rgb = np.array(calibData.getCameraIntrinsics(dai.CameraBoardSocket.CAM_A, 1280, 720))
25        print("RGB Camera resized intrinsics...")
26        print(M_rgb)
27
28        D_rgb = np.array(calibData.getDistortionCoefficients(dai.CameraBoardSocket.CAM_A))
29        print("RGB Distortion Coefficients...")
30        [print(name + ": " + value) for (name, value) in
31         zip(["k1", "k2", "p1", "p2", "k3", "k4", "k5", "k6", "s1", "s2", "s3", "s4", "τx", "τy"],
32             [str(data) for data in D_rgb])]
33
34        print(f'RGB FOV {calibData.getFov(dai.CameraBoardSocket.CAM_A)}')
35
36    else:
37        M_rgb, width, height = calibData.getDefaultIntrinsics(dai.CameraBoardSocket.CAM_A)
38        print("RGB Camera Default intrinsics...")
39        print(M_rgb)
40        print(width)
41        print(height)
42
43        M_rgb = np.array(calibData.getCameraIntrinsics(dai.CameraBoardSocket.CAM_A, 3840, 2160))
44        print("RGB Camera resized intrinsics... 3840 x 2160 ")
45        print(M_rgb)
46
47
48        M_rgb = np.array(calibData.getCameraIntrinsics(dai.CameraBoardSocket.CAM_A, 4056, 3040 ))
49        print("RGB Camera resized intrinsics... 4056 x 3040 ")
50        print(M_rgb)
51
52
53        M_left, width, height = calibData.getDefaultIntrinsics(dai.CameraBoardSocket.CAM_B)
54        print("LEFT Camera Default intrinsics...")
55        print(M_left)
56        print(width)
57        print(height)
58
59        M_left = np.array(calibData.getCameraIntrinsics(dai.CameraBoardSocket.CAM_B, 1280, 720))
60        print("LEFT Camera resized intrinsics...  1280 x 720")
61        print(M_left)
62
63
64        M_right = np.array(calibData.getCameraIntrinsics(dai.CameraBoardSocket.CAM_C, 1280, 720))
65        print("RIGHT Camera resized intrinsics... 1280 x 720")
66        print(M_right)
67
68        D_left = np.array(calibData.getDistortionCoefficients(dai.CameraBoardSocket.CAM_B))
69        print("LEFT Distortion Coefficients...")
70        [print(name+": "+value) for (name, value) in zip(["k1","k2","p1","p2","k3","k4","k5","k6","s1","s2","s3","s4","τx","τy"],[str(data) for data in D_left])]
71
72        D_right = np.array(calibData.getDistortionCoefficients(dai.CameraBoardSocket.CAM_C))
73        print("RIGHT Distortion Coefficients...")
74        [print(name+": "+value) for (name, value) in zip(["k1","k2","p1","p2","k3","k4","k5","k6","s1","s2","s3","s4","τx","τy"],[str(data) for data in D_right])]
75
76        print(f"RGB FOV {calibData.getFov(dai.CameraBoardSocket.CAM_A)}, Mono FOV {calibData.getFov(dai.CameraBoardSocket.CAM_B)}")
77
78        R1 = np.array(calibData.getStereoLeftRectificationRotation())
79        R2 = np.array(calibData.getStereoRightRectificationRotation())
80        M_right = np.array(calibData.getCameraIntrinsics(calibData.getStereoRightCameraId(), 1280, 720))
81
82        H_left = np.matmul(np.matmul(M_right, R1), np.linalg.inv(M_left))
83        print("LEFT Camera stereo rectification matrix...")
84        print(H_left)
85
86        H_right = np.matmul(np.matmul(M_right, R1), np.linalg.inv(M_right))
87        print("RIGHT Camera stereo rectification matrix...")
88        print(H_right)
89
90        lr_extrinsics = np.array(calibData.getCameraExtrinsics(dai.CameraBoardSocket.CAM_B, dai.CameraBoardSocket.CAM_C))
91        print("Transformation matrix of where left Camera is W.R.T right Camera's optical center")
92        print(lr_extrinsics)
93
94        l_rgb_extrinsics = np.array(calibData.getCameraExtrinsics(dai.CameraBoardSocket.CAM_B, dai.CameraBoardSocket.CAM_A))
95        print("Transformation matrix of where left Camera is W.R.T RGB Camera's optical center")
96        print(l_rgb_extrinsics)

C++

1#include <cstdio>
2#include <iostream>
3#include <string>
4
5// Includes common necessary includes for development using depthai library
6#include "depthai-shared/common/CameraBoardSocket.hpp"
7#include "depthai-shared/common/EepromData.hpp"
8#include "depthai/depthai.hpp"
9
10void printMatrix(std::vector<std::vector<float>> matrix) {
11    using namespace std;
12    std::string out = "[";
13    for(auto row : matrix) {
14        out += "[";
15        for(auto val : row) out += to_string(val) + ", ";
16        out = out.substr(0, out.size() - 2) + "]\n";
17    }
18    out = out.substr(0, out.size() - 1) + "]\n\n";
19    cout << out;
20}
21
22int main(int argc, char** argv) {
23    using namespace std;
24
25    // Connect Device
26    dai::Device device;
27
28    dai::CalibrationHandler calibData = device.readCalibration();
29    // calibData.eepromToJsonFile(filename);
30    std::vector<std::vector<float>> intrinsics;
31    int width, height;
32
33    cout << "Intrinsics from defaultIntrinsics function:" << endl;
34    std::tie(intrinsics, width, height) = calibData.getDefaultIntrinsics(dai::CameraBoardSocket::CAM_C);
35    printMatrix(intrinsics);
36
37    cout << "Width: " << width << endl;
38    cout << "Height: " << height << endl;
39
40    cout << "Stereo baseline distance: " << calibData.getBaselineDistance() << " cm" << endl;
41
42    cout << "Mono FOV from camera specs: " << calibData.getFov(dai::CameraBoardSocket::CAM_B)
43         << ", calculated FOV: " << calibData.getFov(dai::CameraBoardSocket::CAM_B, false) << endl;
44
45    cout << "Intrinsics from getCameraIntrinsics function full resolution:" << endl;
46    intrinsics = calibData.getCameraIntrinsics(dai::CameraBoardSocket::CAM_C);
47    printMatrix(intrinsics);
48
49    cout << "Intrinsics from getCameraIntrinsics function 1280 x 720:" << endl;
50    intrinsics = calibData.getCameraIntrinsics(dai::CameraBoardSocket::CAM_C, 1280, 720);
51    printMatrix(intrinsics);
52
53    cout << "Intrinsics from getCameraIntrinsics function 720 x 450:" << endl;
54    intrinsics = calibData.getCameraIntrinsics(dai::CameraBoardSocket::CAM_C, 720);
55    printMatrix(intrinsics);
56
57    cout << "Intrinsics from getCameraIntrinsics function 600 x 1280:" << endl;
58    intrinsics = calibData.getCameraIntrinsics(dai::CameraBoardSocket::CAM_C, 600, 1280);
59    printMatrix(intrinsics);
60
61    std::vector<std::vector<float>> extrinsics;
62
63    cout << "Extrinsics from left->right test:" << endl;
64    extrinsics = calibData.getCameraExtrinsics(dai::CameraBoardSocket::CAM_B, dai::CameraBoardSocket::CAM_C);
65    printMatrix(extrinsics);
66
67    cout << "Extrinsics from right->left test:" << endl;
68    extrinsics = calibData.getCameraExtrinsics(dai::CameraBoardSocket::CAM_C, dai::CameraBoardSocket::CAM_B);
69    printMatrix(extrinsics);
70
71    cout << "Extrinsics from right->rgb test:" << endl;
72    extrinsics = calibData.getCameraExtrinsics(dai::CameraBoardSocket::CAM_C, dai::CameraBoardSocket::CAM_A);
73    printMatrix(extrinsics);
74
75    cout << "Extrinsics from rgb->right test:" << endl;
76    extrinsics = calibData.getCameraExtrinsics(dai::CameraBoardSocket::CAM_A, dai::CameraBoardSocket::CAM_C);
77    printMatrix(extrinsics);
78
79    cout << "Extrinsics from left->rgb test:" << endl;
80    extrinsics = calibData.getCameraExtrinsics(dai::CameraBoardSocket::CAM_B, dai::CameraBoardSocket::CAM_A);
81    printMatrix(extrinsics);
82
83    return 0;
84}

需要帮助?

请前往 Discussion Forum 获取技术支持或提出您可能有的任何其他问题。