blob: f4937e5291f4ae14f9746bbccc14f46732f3a3ce [file] [log] [blame]
James Kuszmauld67f6d22023-02-05 17:37:25 -08001#include "y2023/vision/vision_util.h"
2
3#include "glog/logging.h"
4
5namespace y2023::vision {
milind-uf2a4e322023-02-01 19:33:10 -08006
James Kuszmauld67f6d22023-02-05 17:37:25 -08007const frc971::vision::calibration::CameraCalibration *FindCameraCalibration(
8 const y2023::Constants &calibration_data, std::string_view node_name) {
9 CHECK(calibration_data.has_cameras());
10 for (const y2023::CameraConfiguration *candidate :
11 *calibration_data.cameras()) {
12 CHECK(candidate->has_calibration());
13 if (candidate->calibration()->node_name()->string_view() != node_name) {
14 continue;
15 }
16 return candidate->calibration();
17 }
18 LOG(FATAL) << ": Failed to find camera calibration for " << node_name;
19}
milind-uf2a4e322023-02-01 19:33:10 -080020
21cv::Mat CameraExtrinsics(
22 const frc971::vision::calibration::CameraCalibration *camera_calibration) {
23 CHECK(!camera_calibration->has_turret_extrinsics())
24 << "No turret on 2023 robot";
25
26 cv::Mat result(4, 4, CV_32F,
27 const_cast<void *>(static_cast<const void *>(
28 camera_calibration->fixed_extrinsics()->data()->data())));
29 result.convertTo(result, CV_64F);
30 CHECK_EQ(result.total(),
31 camera_calibration->fixed_extrinsics()->data()->size());
32
33 return result;
34}
35
36cv::Mat CameraIntrinsics(
37 const frc971::vision::calibration::CameraCalibration *camera_calibration) {
38 cv::Mat result(3, 3, CV_32F,
39 const_cast<void *>(static_cast<const void *>(
40 camera_calibration->intrinsics()->data())));
41 result.convertTo(result, CV_64F);
42 CHECK_EQ(result.total(), camera_calibration->intrinsics()->size());
43
44 return result;
45}
46
47cv::Mat CameraDistCoeffs(
48 const frc971::vision::calibration::CameraCalibration *camera_calibration) {
49 const cv::Mat result(5, 1, CV_32F,
50 const_cast<void *>(static_cast<const void *>(
51 camera_calibration->dist_coeffs()->data())));
52 CHECK_EQ(result.total(), camera_calibration->dist_coeffs()->size());
53 return result;
54}
55
James Kuszmauld67f6d22023-02-05 17:37:25 -080056} // namespace y2023::vision