код образца калибровки камеры (матрица bigmat)

Я смотрю пример кода калибровки камеры в opencv.

Теперь меня беспокоит понимание некоторых строк кода. Этот код находится в папке примеров кода в Opencv 2.4.3.

Мой вопрос касается C ++, а не opencv.

Вот пример кода в opencv.

if( !rvecs.empty() && !tvecs.empty() )
{
CV_Assert(rvecs[0].type() == tvecs[0].type());
Mat bigmat((int)rvecs.size(), 6, rvecs[0].type());

for( int i = 0; i < (int)rvecs.size(); i++ )
{
Mat r = bigmat(Range(i, i+1), Range(0,3));
Mat t = bigmat(Range(i, i+1), Range(3,6));

CV_Assert(rvecs[i].rows == 3 && rvecs[i].cols == 1);
CV_Assert(tvecs[i].rows == 3 && tvecs[i].cols == 1);
//*.t() is MatExpr (not Mat) so we can use assignment operator
r = rvecs[i].t();
t = tvecs[i].t();
}
cvWriteComment( *fs, "a set of 6-tuples (rotation vector + translation vector) for each view",       0 );
fs << "Extrinsic_Parameters" << bigmat;

Мой вопрос заключается в том, как данные помещаются в «bigmat». Чтобы установить значения для переменной, ‘bigmat’ должен быть расположен справа, но его нет.

Есть ли кто-нибудь, кто знаком с такими кодами? Помоги мне.

Спасибо

0

Решение

r а также t матрицы фактически являются заголовками для подмножества данных bigmat. Поэтому, когда вы кладете что-то в rВы на самом деле работаете на bigmat. Чтобы предотвратить что-то подобное, вам нужно использовать cv::MAt::clone(), Посмотрите документацию по мату, четвертая пуля.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]