gpt4 book ai didi

c++ - 将 OpenCV 与 std::Array 一起使用

转载 作者:搜寻专家 更新时间:2023-10-31 02:18:32 26 4
gpt4 key购买 nike

这个问题与这个问题相关std::array<T,N> need to be fetched in another types

我注意到处理点序列的 OpenCV 方法接受点类型的 cv::InputArrayconst*。例如(cv::Point* const)当你在 std::array 中有你的点时,你可以依赖于 OpenCV 方法的 const* 输入并调用 my_array.data() 为了获得该类型的指针。但是,您将不得不处理从 cv::Pointcv::Point2f 的问题,反之亦然。此外,这并不是真正正确的方法。

我认为可以在 cv::InputArray 中找到解决方案,在那里我会找到基于迭代器的解决方案或至少是 C++ 标准容器的重载。我阅读了它的文档,我震惊地发现它采用 std::vectorcv::Mat 和其他一些 Gpu 数据类型。

问题是:如何克服这个问题?我错过了什么?换句话说:如何以最佳方式将 OpenCV 与标准容器结合使用?

示例:

std::array<cv::Point,4> my_points,my_points2;
//fill my_points,my_points2
cv::fillConvexPoly(img, my_points.data(), 4, cv::Scalar::all(255));//this works
auto homography_matrix = cv::getPerspectiveTransform(my_points.data(), my_points2.data()); //This will not work

最佳答案

OpenCV 函数没有任何问题。简单 fillConvexPoly期待Point , 而 getPerspectiveTransform期待Point2f .因此,您应该将正确的数据类型传递给这些函数。

它也与array无关而不是 vector . vector<Point>也不好,但你需要一个 vector<Point2f> .

您可以转换您的 std::array<cv::Point, 4>vector<Point2f>然后传递给getPerspectiveTransform :

vector<Point2f> pts(my_points.begin(), my_points.end());
auto homography_matrix = cv::getPerspectiveTransform(pts.data(), pts.data());

关于c++ - 将 OpenCV 与 std::Array 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34436719/

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