如何将 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;

请注意,您可以使用 Vec3dMatx31Matx13,而不是只有 3 个值的矩阵。然而,使用 Mat1d 会简化符号并使代码不那么冗长。