【问题标题】:convert Rect to vector<Point>将 Rect 转换为向量<Point>
【发布时间】:2016-12-21 07:53:16
【问题描述】:

我正在使用 OpenCV,需要将 cv::Rect 中所有点的 std::vector&lt;cv::Point&gt; 转换为 Rect

我想知道是否有一种方法可以做到这一点? 如果没有,我如何用我的积分填充std::vector

我尝试在构造函数中添加点,但失败了:

cv::Rect rect
std::vector<cv::Point> _contour(rect.tl(),rect.br());

我得到的错误是

没有构造函数实例“std::vector<_ty _alloc>::vector [with _Ty=cv::Point, _Alloc=std::allocator]" 匹配参数列表

我尝试使用insert 函数添加点,但这也失败了:

cv::Rect rect
std::vector<cv::Point> _contour;
_contour.insert(rect.tl());

我得到的错误是:

没有重载函数实例“std::vector<_ty _alloc>::insert [with _Ty=cv::Point, _Alloc=std::allocator]" 匹配 参数列表

谢谢

【问题讨论】:

  • 请显示您的代码使用insert 函数失败,以及错误消息。
  • @BoBTFish 感谢您的评论,我将代码和错误添加到问题中
  • std::vector 中的 insert 函数在插入 范围 元素时使用。要插入单个元素,请使用push_back(或emplace_back)。
  • @BoBTFish 谢谢,我错过了。

标签: c++ opencv


【解决方案1】:

由于rect.tl()的返回类型是一个点,所以可以使用初始化列表来构造向量:

std::vector<cv::Point> _contour { rect.tl(), rect.br() };

正如 BoBTFish 所说,您应该使用 push_back 而不是 insert :

std::vector<cv::Point> _contour;
_contour.push_back(rect.tl());

另一种方式:您知道向量的大小并更改值:

std::vector<cv::Point> _contour(2);
_contour[0] = rect.tl();
_contour[1] = rect.br();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-24
    • 1970-01-01
    相关资源
    最近更新 更多