C++ 使用一维数组和二维数组给 std::vector<cv::Point2d> 赋值的方法

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;
}

猜你喜欢

转载自blog.csdn.net/qq_43799400/article/details/131111352