gpt4 book ai didi

c++ - OpenCV vector - 没有用于初始化 'cv::Point_' 的匹配构造函数

转载 作者:行者123 更新时间:2023-11-28 02:02:23 28 4
gpt4 key购买 nike

我正在尝试 emplace_back 一个本地构建的(内部方法)cv::Point3i到对象变量(声明为 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++ 的,所以我倾向于将错误归咎于我的编码,但我找不到问题所在。

有人可以为我指出解决方案或解决方法吗?

谢谢!

最佳答案

由于您要插入类型为 cv::Point3i 的 vector 对象, 然后是 centroids 的类型应该是:std::vector<cv::Point3i> .

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

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

关于c++ - OpenCV vector<point> - 没有用于初始化 'cv::Point_<int>' 的匹配构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38925508/

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