-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcalibrated_opencv_camera.cpp
51 lines (40 loc) · 1.14 KB
/
calibrated_opencv_camera.cpp
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
#include "calibrated_opencv_camera.h"
IntrinsicCalibration setupCalibration()
{
// Set K matrix.
cv::Matx33d K
{6.6051081297156020e+02, 0., 3.1810845757653777e+02,
0., 6.6051081297156020e+02, 2.3995332228230293e+02,
0., 0., 1.};
// Set distortion coefficients [k1, k2, 0, 0, k3].
cv::Vec5d dist_coeffs{
0., 2.2202255011309072e-01, 0., 0., -5.0348071005413975e-01};
// Set image size.
cv::Size2i img_size(640, 480);
return {K, dist_coeffs, img_size};
}
CalibratedOpencvCamera::CalibratedOpencvCamera(int camera_id)
: cap_(camera_id)
, calibration_(setupCalibration())
{
cap_.set(cv::CAP_PROP_FRAME_WIDTH, calibration_.img_size().width);
cap_.set(cv::CAP_PROP_FRAME_HEIGHT, calibration_.img_size().height);
if (!cap_.isOpened())
{
throw std::runtime_error("Could not open camera " + std::to_string(camera_id));
}
}
const IntrinsicCalibration& CalibratedOpencvCamera::calibration()
{
return calibration_;
}
cv::Mat CalibratedOpencvCamera::captureImage()
{
cv::Mat image;
cap_ >> image;
if (image.empty())
{
throw std::runtime_error("Could not capture from camera");
}
return image;
}