如何把矢量转换成矢量?
问题描述:
有没有简单的解决方案如何将vector<cv::Point2d>
转换为vector<cv::Point>
?像这里的东西C++ convert vector<int> to vector<double>?如何把矢量<cv::Point2d>转换成矢量<cv::Point>?
此类型模板:
typedef Point_<double> Point2d;
typedef Point_<int> Point2i;
typedef Point2i Point;
/*!
template 2D point class.
The class defines a point in 2D space. Data type of the point coordinates is specified
as a template parameter. There are a few shorter aliases available for user convenience.
See cv::Point, cv::Point2i, cv::Point2f and cv::Point2d.
*/
template<typename _Tp> class Point_
{
public:
typedef _Tp value_type;
// various constructors
Point_();
Point_(_Tp _x, _Tp _y);
Point_(const Point_& pt);
Point_(const CvPoint& pt);
Point_(const CvPoint2D32f& pt);
Point_(const Size_<_Tp>& sz);
Point_(const Vec<_Tp, 2>& v);
Point_& operator = (const Point_& pt);
//! conversion to another data type
template<typename _Tp2> operator Point_<_Tp2>() const;
//! conversion to the old-style C structures
operator CvPoint() const;
operator CvPoint2D32f() const;
operator Vec<_Tp, 2>() const;
//! dot product
_Tp dot(const Point_& pt) const;
//! dot product computed in double-precision arithmetics
double ddot(const Point_& pt) const;
//! cross-product
double cross(const Point_& pt) const;
//! checks whether the point is inside the specified rectangle
bool inside(const Rect_<_Tp>& r) const;
_Tp x, y; //< the point coordinates
};
答
由于没有从CV转换:: Point2D从简历::点我建议一个lambda(未经测试):
vector<cv::Point2d> src ;
vector<cv::Point> dest ;
std::copy(src.begin(),
src.end(),
[&dest](const cv::Point2d &item) {
dest.push_back(cv::Point(pt.x, pt.y)) ;}) ;
答
你可以做完全如上所述使用矢量范围构造器:
#include <opencv2\opencv.hpp>
#include <vector>
using namespace cv;
using namespace std;
int main()
{
vector<Point2d> vd{ { 1.1, 2.2 }, { 3.3, 4.4 }, {5.5, 6.6} };
vector<Point> v(vd.begin(), vd.end());
// Print for debug
copy(vd.begin(), vd.end(), ostream_iterator<Point2d>(cout, " "));
cout << endl;
copy(v.begin(), v.end(), ostream_iterator<Point>(cout, " "));
return 0;
}
这将工作,因为你可以从Point2d
建立一个Point
与:
template<typename _Tp> template<typename _Tp2> inline Point_<_Tp>::operator Point_<_Tp2>() const
{ return Point_<_Tp2>(saturate_cast<_Tp2>(x), saturate_cast<_Tp2>(y)); }