我正在使用将点存储到Vector数据类型中的代码,如下所示:

    RECT head;
    head.left = pt1.x;
    head.right = pt2.x;
    head.top = pt1.y;
    head.bottom = pt2.y;

    detectBox->push_back(head);

这属于一个具有for循环的函数,该循环将“head”的多个实例存储到detectBox中。此函数的定义如下:
void GetHeads(cv::Mat Img, vector<RECT>* detectBox)

图中的Img只是正常的黑白图像,其中的头是通过其他过程提取的。我现在的问题是如何查看在detectBox中存储的点?我想在for循环之外访问它们以用于其他用途。当我尝试打印出变量Ive时,只能返回地址(0000004FA8F6F31821等)

另外,detectBox在代码中是灰色阴影(不确定这是什么意思)。

完整的代码可以在与该功能有关的其他问题中找到:

C++ CvSeq Accessing arrays that are stored

- - -编辑 - - -

尝试的方法以及相关的错误/输出:

第一:
std::cout << "Back :  " << &detectBox->back << std::endl;



第二:
std::cout << "Back :  " << detectBox->back << std::endl;



第三:(注意,没有错误,但是没有有用的信息输出)
    std::cout << "Detect Box :  " << detectBox << std::endl;



第四:
std::cout << "Detect Box :  " << &detectBox[1] << std::endl;

最佳答案

首先,detectBox是指向该数组的指针,因此在尝试对其进行索引之前需要对其进行解除引用。

std::cout << (*detectBox)[1];  // Outputs the 2nd RECT in the vector
                               // assuming an operator<< is implemented
                               // for RECT.

在将'&'运算符的地址包括在内之前,它将在索引1处打印出第二个RECT实例的地址,您不需要这样做,因为索引运算符为您提供了引用。
std::cout << &(*detectBox)[1];

如果没有用于RECT实例的operator <
std::cout << "Left: " << (*detectBox)[1].left;
std::cout << "Right: " << (*detectBox)[1].right;
std::cout << "Top: " << (*detectBox)[1].top;
std::cout << "Bottom: " << (*detectBox)[1].bottom;

可以通过保存对您首先尝试获得的RECT的引用,然后使用该引用来改善此效果:
RECT& secondRect = (*detectBox)[1];
std::cout << "Left: " << secondRect.left;
std::cout << "Right: " << secondRect.right;
std::cout << "Top: " << secondRect.top;
std::cout << "Bottom: " << secondRect.bottom;

最后,我注意到您将新的RECT推到Vector的背面,但是始终在vector中输出第二个RECT。假设您要打印刚刚添加的RECT,则可以输出head局部变量,也可以在 vector 上使用back()方法,如下所示:
RECT& lastRect = detectBox->back();
std::cout << "Left: " << lastRect.left;
std::cout << "Right: " << lastRect.right;
std::cout << "Top: " << lastRect.top;
std::cout << "Bottom: " << lastRect.bottom;

关于c++ - 在Vector <RECT>数组内显示值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39795886/

10-11 04:02