-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathcamera_positions.cpp
More file actions
63 lines (49 loc) · 1.44 KB
/
Copy pathcamera_positions.cpp
File metadata and controls
63 lines (49 loc) · 1.44 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#include "camera_positions.h"
#include <opencv2/opencv.hpp>
#include <optional>
#include <map>
#include <iostream>
#include <fstream>
#include "absl/log/check.h"
namespace robot_vision {
CameraPositions::CameraPositions() {
robot_to_camera_[2] = Transformation((cv::Mat_<double>(4, 4) <<
1, 0, 0, 0,
0, 1, 0, 0,
0, 0, 1, 0,
0, 0, 0, 1
));
}
bool CameraPositions::CameraExists(CameraId cam) const {
return robot_to_camera_.find(cam) != robot_to_camera_.end();
}
const Transformation& CameraPositions::GetRobotToCamera(CameraId cam) const {
auto it = robot_to_camera_.find(cam);
// CHECK(it != robot_to_camera_.end()) << "Camera " << cam << " doesn't exist";
return it->second;
}
void CameraPositions::emplace(int cam, Transformation pos) {
robot_to_camera_.emplace(cam, pos);
}
CameraPositions ReadCameraPositions(const std::string& filename) {
std::ifstream file(filename);
CHECK(file) << "Could not open file " << filename;
CameraPositions cams;
int cam_num;
CHECK(file >> cam_num) << "Error reading from " << filename;
for (int i=0; i<cam_num; ++i) {
int cam;
CHECK(file >> cam) << "Error reading from " << filename;
cv::Mat pos(4, 4, CV_64F);
for (int j=0; j<4; ++j) {
for (int k=0; k<4; ++k) {
double val;
CHECK(file >> val) << "Error reading from " << filename;
pos.at<double>(j, k) = val;
}
}
cams.emplace(cam, Transformation(pos));
}
return cams;
}
}