blob: a26af3b9d9c8318267a728fe4b7ad42cdd766518 [file] [log] [blame]
Jim Ostrowskicb8b4082024-01-21 02:23:46 -08001#ifndef FRC971_VISION_VISION_UTIL_LIB_H_
2#define FRC971_VISION_VISION_UTIL_LIB_H_
3#include <optional>
4#include <string_view>
5
6#include "opencv2/imgproc.hpp"
7
8#include "frc971/vision/calibration_generated.h"
9
Jim Ostrowskib974cca2024-01-28 15:07:50 -080010// Extract the CameraExtrinsics from a CameraCalibration struct
Jim Ostrowskicb8b4082024-01-21 02:23:46 -080011namespace frc971::vision {
12std::optional<cv::Mat> CameraExtrinsics(
13 const frc971::vision::calibration::CameraCalibration *camera_calibration);
14
Jim Ostrowskib974cca2024-01-28 15:07:50 -080015// Extract the CameraIntrinsics from a CameraCalibration struct
Jim Ostrowskicb8b4082024-01-21 02:23:46 -080016cv::Mat CameraIntrinsics(
17 const frc971::vision::calibration::CameraCalibration *camera_calibration);
18
Jim Ostrowskib974cca2024-01-28 15:07:50 -080019// Extract the CameraDistCoeffs from a CameraCalibration struct
Jim Ostrowskicb8b4082024-01-21 02:23:46 -080020cv::Mat CameraDistCoeffs(
21 const frc971::vision::calibration::CameraCalibration *camera_calibration);
22
Jim Ostrowskib974cca2024-01-28 15:07:50 -080023// Get the camera number from a camera channel name, e.g., return 2 from
24// "/camera2". Returns nullopt if string doesn't start with "/camera" or does
25// not have a number
26std::optional<uint16_t> CameraNumberFromChannel(std::string camera_channel);
27
Jim Ostrowski33208982024-03-02 15:01:45 -080028// Return a calibration filename to save to based on the given data
29std::string CalibrationFilename(std::string calibration_folder,
30 std::string node_name, int team_number,
31 int camera_number, std::string camera_id,
32 std::string timestamp);
33
Jim Ostrowskicb8b4082024-01-21 02:23:46 -080034} // namespace frc971::vision
35
36#endif // FRC971_VISION_VISION_UTIL_LIB_H_