gpt4 book ai didi

c++ - 传递 opencv inputarray 并将其用作 std::vector

转载 作者:行者123 更新时间:2023-11-27 23:03:15 24 4
gpt4 key购买 nike

我想编写一个使用 cv::InputArray 作为参数的自定义函数。在该函数中,我知道我可以使用 cv::InputArray::getMat 来获取输入 cv::Mat 的标题。

我在将 std::vector 传递给 cv::InputArray 时有些困惑。

1.如果我将 std::vector 传递给一个函数,我还能在函数中得到 std::vector 吗?例如:

void foo(cv::InputArray _input)
{
std::vector<cv::Point2f> input = _input.getVector() // getVector function doesn't exist
}

std::vector<cv::Point2f> a;
foo(a);

2.如果我将 std::vector 传递给函数并使用 getMat 在函数内获取 cv::Mat,垫子会是什么样子?

保利对std::vector<char>的案例做出了明确的解释.如果我想得到 std::vector<cv::Point2f> 怎么办?在函数中,有什么建议吗?

非常感谢。

最佳答案

当您将 vector 传递给采用 InputArray 的函数时,您隐式调用了转换构造函数 InputArray::InputArray(vector)。 (这里解释了转换构造函数:https://stackoverflow.com/a/15077788/928387)

在这个构造函数中, vector 的指针被简单地分配给 InputArray 中的 obj 成员变量。如果你使用OpenCV 3.0,InputArray有getObj()方法,所以你可以通过以下方式获取vector:

// Only works on OpenCV 3.0 or above
const std::vector<Point2f>& input = *(const std::vector<Point2f>*)_input.getObj();

如果你使用 OpenCV 2.X,你可以使用 InputArray::getMat()。它返回具有指向数据的指针的 Mat 对象。所以你也可以按照下面的方式来做。

// Should Work on any OpenCV version
cv::Mat mat = _input.getMat();
Point2f *data = (Point2f *)mat.data;
int length = mat.total();
std::vector<Point2f> input;
input.assign(data, data + length);

关于您的第二个问题,如果您在具有 N 个元素的 InputArray 对象上调用 InputArray::getMat(),它会返回 (N*1) 个矩阵。

关于c++ - 传递 opencv inputarray 并将其用作 std::vector,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25750041/

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