文章目录
1. 一维数组给 vector 赋值的方法
(1)最简单的赋值方法是for循环遍历赋值,此处略过。
(2)还有一种方法可以直接将数组赋值给 vector :
int arr[4] = {1, 2, 3, 4};
vector<int> v(arr, arr + 4);
(3)此外还可以用 STL里面提供的 generate() 方法,但没有方法(2) 方便,此处略过,具体可以参考 c++中如何将数组赋值给vector
2. 一维 Point2d 数组给 vector<cv::Point2d> 赋值
一维数组给 vectorcv::Point2d 赋值就很简单了:
#include <opencv2\opencv.hpp>
#include <vector>
int main() {
cv::Point2d input[3] = { cv::Point2d(0,0),cv::Point2d(1,1),cv::Point2d(2,2) };
std::vector<cv::Point2d> output(input, input + 3);
std::cout << "End!" << std::endl; // End!
return 0;
}
3. 二维 double 数组给 vector<cv::Point2d> 赋值
二维数组给 vectorcv::Point2d 赋值就需要注意了,如果还是参照上面说的 一维数组给 vector 赋值的方法,那么就会报错了:
#include <opencv2\opencv.hpp>
#include <vector>
int main() {
double input[3][2] = { {0,0},{1,1},{2,2} };
std::vector<cv::Point2d> output(input, input + 3);
std::cout << "End!" << std::endl;
return 0;
}
/*
报错:
error C2664: “cv::Point_<double>::Point_(const cv::Point_<double> &)”:
无法将参数 1 从“double [2]”转换为“const cv::Vec<double,2> &”
*/
报错:
并且这种报错不会指出出错的位置,非常难找到错误所在。
报错内容说 “无法将参数 1 从“double [2]”转换为“const cv::Vec<double,2> & ”,其实就是指无法将二维数组中的一维数组(double [2])转换为 cv::Point2d 类型。
所以这种情况我们就只能采用最笨的遍历赋值了,代码如下:
#include <opencv2\opencv.hpp>
#include <vector>
int main() {
double input[3][2] = { {0,0},{1,1},{2,2} };
std::vector<cv::Point2d> output(3);
for (int i = 0; i != 3; i++) {
output[i].x = input[i][0];
output[i].y = input[i][1];
}
std::cout << "End!" << std::endl; // End!
return 0;
}