gpt4 book ai didi

c++ - 使用队列在 OpenCV 中保存平移和旋转矩阵

转载 作者:行者123 更新时间:2023-11-28 08:13:57 26 4
gpt4 key购买 nike

我需要使用队列来为每个轮廓生成旋转和平移矩阵(使用 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

最佳答案

您正在将指针插入队列,但您正在重复使用相同的内存位置。因此,您的所有队列项目都指向内存中的相同位置。

调用cvFindExtrinsicCameraParams2 之前创建新的旋转和平移矩阵。然后将新创建的矩阵指针插入队列。

您可能想看看使用智能指针,这样您就不会遇到内存泄漏问题。或者,只需使用 Mat 类,让它为您管理数据。

关于c++ - 使用队列在 OpenCV 中保存平移和旋转矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8238587/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com