OpenCV vector <point> - 没有匹配的承包商初始化&#39; cv :: Point_ <int>&#39;

时间:2016-08-12 19:49:01

标签: c++ opencv

我正在尝试将本地构造的(内部方法)cv::Point3i emplace_back移植到对象变量(声明为std::vector<cv::Point>)上。这样做,我得到编译错误(不是运行时):

memory - No matching constructor for initialization of 'cv::Point_<int>'

使用Point2i尝试相同的操作(省略我需要的值之一),编译器不会抛出任何错误。

这是来自.cpp文件的片段:

void ObjectDetector::centroids2Dto3D() {
    const int* map_ptr = (int*)mapHeight.data;
    unsigned long steps[2];
    steps[0] = mapHeight.step1(0);
    steps[1] = mapHeight.step1(1);
    for (std::vector<cv::Point>::iterator it = centroidsXZ.begin(); it != centroidsXZ.end(); it++) {
        const int x = (*it).x;
        const int z = (*it).y;
        int y = map_ptr[steps[0] * x + steps[1] * z];

        // MARK: The following line causes the error. Without it, the program compiles fine
        centroids.emplace_back(cv::Point3i(x,y,z));
    }
}

由于我不是最好的调试C ++,我倾向于把错误放在我的编码上,但我在这里找不到问题。

有人能指出我的解决方案或途径吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

由于您要插入cv::Point3i类型的矢量对象,因此centroids的类型应为:std::vector<cv::Point3i>

此外,您正在调用emplace_back错误。它的论点应该是转发给Point3i的构造函数的论据,即:centroids.emplace_back(x,y,z);

使用emplace_back将避免使用push_back时所需的额外复制或移动操作。您可以找到更多详细信息here