@@ -59,28 +59,45 @@ void Mapper::gradient(const Mat& img1, const Mat& img2, Mat& Ix, Mat& Iy, Mat& I
59
59
}
60
60
61
61
// //////////////////////////////////////////////////////////////////////////////////////////////////
62
- void Mapper::grid (const Mat& img, Mat& grid_r, Mat& grid_c) const
62
+
63
+ template <typename _Tp>
64
+ void fillGridMatrices (const Mat img, Mat grid_r, Mat grid_c)
63
65
{
64
- // Matrices with reference frame coordinates
65
- grid_r.create (img.size (), img.type ());
66
- grid_c.create (img.size (), img.type ());
67
66
if (img.channels () == 1 ) {
68
67
for (int r_i = 0 ; r_i < img.rows ; ++r_i) {
69
68
for (int c_i = 0 ; c_i < img.cols ; ++c_i) {
70
- grid_r.at <double >(r_i, c_i) = r_i;
71
- grid_c.at <double >(r_i, c_i) = c_i;
69
+ grid_r.at <_Tp >(r_i, c_i) = r_i;
70
+ grid_c.at <_Tp >(r_i, c_i) = c_i;
72
71
}
73
72
}
74
73
} else {
75
- Vec3d ones (1 ., 1 ., 1 .);
74
+ Vec<_Tp, 3 > ones (1 ., 1 ., 1 .);
76
75
for (int r_i = 0 ; r_i < img.rows ; ++r_i) {
77
76
for (int c_i = 0 ; c_i < img.cols ; ++c_i) {
78
- grid_r.at <Vec3d >(r_i, c_i) = r_i*ones;
79
- grid_c.at <Vec3d >(r_i, c_i) = c_i*ones;
77
+ grid_r.at < Vec<_Tp, 3 > >(r_i, c_i) = r_i*ones;
78
+ grid_c.at < Vec<_Tp, 3 > >(r_i, c_i) = c_i*ones;
80
79
}
81
80
}
82
81
}
83
82
}
84
83
84
+ void Mapper::grid (const Mat& img, Mat& grid_r, Mat& grid_c) const
85
+ {
86
+ CV_DbgAssert (img.channels () == 1 || img.channels () == 3 );
87
+
88
+ // Matrices with reference frame coordinates
89
+ grid_r.create (img.size (), img.type ());
90
+ grid_c.create (img.size (), img.type ());
91
+
92
+ if (img.depth () == CV_8U)
93
+ fillGridMatrices<uchar>(img, grid_r, grid_c);
94
+ if (img.depth () == CV_16U)
95
+ fillGridMatrices<ushort>(img, grid_r, grid_c);
96
+ else if (img.depth () == CV_32F)
97
+ fillGridMatrices<float >(img, grid_r, grid_c);
98
+ else if (img.depth () == CV_64F)
99
+ fillGridMatrices<double >(img, grid_r, grid_c);
100
+ }
101
+
85
102
86
103
}} // namespace cv::reg
0 commit comments