【发布时间】:2023-03-29 20:45:02
【问题描述】:
我有一个变量M,它是一个cv::Mat1d 矩阵。它是这样制作的:
cv::Mat1d<double> M;
它在一些其他代码中填充了一堆可能不需要的值,当我打印它时它看起来像这样:
[-0.9344576352096885;
-0.9344576352096885;
-0.5766199600499906;
0.2846686026510846;
0.9589011777015718;
0.9285453673591227;
0.3137239980297359;
-0.2302718892981206;
-0.2921750731112262;
-0.2206633656711884;
-0.2175072323850435;
-0.1725991485554647;
-0.2140556050785325;
-0.4148403958730175;
-0.4036417215304363;
-0.06016889338878993;
0.3028103268622913;
0.4454375499811856;
0.3803583582813156;
0.3188387192279333;
0.3914868895364941;
0.4488724871465618;
0.2694705005556897;
-0.05248136866304744;
-0.2971598882254832;
-0.3545797186279719;
-0.2294426230118397;
-0.1673776410980104;
-0.2768386357175945;
-0.3276029287776189;
-0.2361695287135101;
-0.06139424097086685;
0.1621769468562924;
0.3275221571852822;
0.3153071221383847;
0.1341365194415481;
-0.04596232030582767;
-0.08961855126383761;
-0.02999823421387905;
-0.03225119207066054]
是尺寸[1 x 40]。
我必须将M 转换为向量X 才能对其进行一些计算。我是这样转换的:
vector<ld> X;
X.push_back(M.at<double>(0, 0));
for (int i = 1; i < M.rows; i++) {
X.push_back(M.at<double>(i, 0));
}
现在当我打印它时(在我所做的计算无关紧要之后),它看起来像这样:
[0 0 0 0 0 -1 -1 0 1 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 1 0 0]
大小为40。
如何将 X 转换回 [1x40] cv::Mat1d 使其与 M 的类型相同?
注意:如果我的问题/语法/其他任何内容令人震惊,我深表歉意。我现在才把 python 的相对安全性留给 c++...
编辑
我想我解决了。如果有人好奇或者我的解决方案需要更正,这里是:
Mat1d test;
for (int i = 0; i < X.size(); i++) {
double new_val = (double) X[i];
test.push_back(new_val);
}
【问题讨论】: