如何将 CV_64F 类型的 Matrix 转换为具有 Double 元素的一维数组
How to cast CV_64F type Matrix to 1D Array with Double elements
我找不到这个问题的答案,但我相信它应该很容易完成。
这里我有以下数据结构;
Mat MyMatrix = Mat(3, 1, CV_64F, &targetArray) //Some 3x1 data in it
// Some process...
array <double ,3> MyArray
MyMatrix.convertTo(MyArray, double, 0 , DBL_MAX)
我想将 MyMatrix(我保证是 3x1)转换为一维数组(数组元素应该是双精度的)。我如何使用 C++ 和 opencv3.0.1 做到这一点?
您不能将 cv::Mat
转换为 std::array
。您只能将数据复制 到一个数组中。
给定一个
Mat m = Mat(3, 1, CV_64F);
// fill with some value
你可以使用 memcpy
:
array<double, 3> a;
memcpy(a.data(), m.ptr<double>(0), 3*sizeof(double));
或std::copy
:
array<double, 3> b;
copy(m.begin<double>(), m.end<double>(), b.begin());
或者,因为它只有 3 个元素,所以数组构造函数:
array<double, 3> c = {m.at<double>(0), m.at<double>(1), m.at<double>(2)};
或者,显然,有一个循环:
array<double, 3> d;
for (int i = 0; i < d.size(); ++i) { d[i] = m.at<double>(i); }
可以使用 std::vector
:
进行转换
vector<double> e = m;
请注意,您可以使用 Vec3d
、Matx31
或 Matx13
,而不是只有 3 个值的矩阵。然而,使用 Mat1d
会简化符号并使代码不那么冗长。
我找不到这个问题的答案,但我相信它应该很容易完成。
这里我有以下数据结构;
Mat MyMatrix = Mat(3, 1, CV_64F, &targetArray) //Some 3x1 data in it
// Some process...
array <double ,3> MyArray
MyMatrix.convertTo(MyArray, double, 0 , DBL_MAX)
我想将 MyMatrix(我保证是 3x1)转换为一维数组(数组元素应该是双精度的)。我如何使用 C++ 和 opencv3.0.1 做到这一点?
您不能将 cv::Mat
转换为 std::array
。您只能将数据复制 到一个数组中。
给定一个
Mat m = Mat(3, 1, CV_64F);
// fill with some value
你可以使用 memcpy
:
array<double, 3> a;
memcpy(a.data(), m.ptr<double>(0), 3*sizeof(double));
或std::copy
:
array<double, 3> b;
copy(m.begin<double>(), m.end<double>(), b.begin());
或者,因为它只有 3 个元素,所以数组构造函数:
array<double, 3> c = {m.at<double>(0), m.at<double>(1), m.at<double>(2)};
或者,显然,有一个循环:
array<double, 3> d;
for (int i = 0; i < d.size(); ++i) { d[i] = m.at<double>(i); }
可以使用 std::vector
:
vector<double> e = m;
请注意,您可以使用 Vec3d
、Matx31
或 Matx13
,而不是只有 3 个值的矩阵。然而,使用 Mat1d
会简化符号并使代码不那么冗长。