Мне нужно использовать Очередь для сохранения сгенерированных матриц вращения и перевода (используя cvFindExtrinsicCameraParams2()
) для каждого контура.
Но когда я вытаскиваю элементы из очереди, все, что я могу получить, это копии той же пары вращения и перевода.
Я сомневаюсь, что это как-то связано с указателями, но когда я попытался избежать указателей в struct
, cvFindExtrinsicCameraParams2()
вызвал исключение.Как это исправить?
//------------A.h------------------
struct RotMat{
CvMat *rotation_;
CvMat *translation_;
};
//-----------B.h-------------------
class B {
private:
CvMat *rotation;
CvMat *translation;
}
//-----------B.cpp-----------------
#include "A.h"
#include "B.h"
void functionx(){
queue<RotMat> rtq;
// start loop
// cvFindExtrinsicCameraParams2(&object_points,&image_points,
// intrinsic,distortion,
// rotation,translation);
RotMat rt = {rotation, translation};
rtq.push(rt);
// end loop
while(!rtq.empty()) { //assume rtq has n elements
RotMat rt_ = rtq.front();
rtq.pop();
cout<< rt_.translation_->data.fl[1]; // the same value pair is
cout<< rt_.rotation->data.fl[1]; // printed in all n iterations
}
}
Результаты испытаний
Total markers detected = 2
Marker 1: Translation: -249.227
Rotation: -0.0124926
Marker 2: Translation: -249.227
Rotation: -0.0124926