如何使用Double元素将CV_64F类型Matrix转换为1D数组

时间:2016-02-21 13:12:55

标签: c++ arrays casting opencv3.0 mat

我无法找到这个问题的答案,但我相信应该很容易做到。

这里我有以下数据结构;

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)转换为1D数组(数组元素应该是双倍)。我怎么能用C ++和opencv3.0.1做到这一点?

1 个答案:

答案 0 :(得分:1)

您无法将dequeueReusableCellWithIdentifier(_:) 转换为X-Mailer。您只能将数据复制到数组中。

给出

$headers = "From: ".$_POST['email']."\r\n".'X-Mailer: PHP/'.phpversion();

您可以使用cv::Mat

std::array

Mat m = Mat(3, 1, CV_64F); // fill with some value

memcpy

或者,因为它只有3个元素,所以数组构造函数:

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());

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::vectorvector<double> e = m; 代替只有3个值的矩阵。但是,使用Vec3d可以简化表示法并使代码更简洁。