Opencv C++读取分配给特征向量的opencv Mat

Posted

技术标签:

【中文标题】Opencv C++读取分配给特征向量的opencv Mat【英文标题】:Opencv C++ Read opencv Mat assigned to Eigen Vector 【发布时间】:2016-04-05 14:29:52 【问题描述】:

我在 opencv 中有一个矩阵 data = 8 rows x 1 cols 声明。我想读取所有值并分配给特征向量。

#include <opencv2/core.hpp>
#include <opencv2/opencv.hpp>
#include <vector>
#include <set>
#include <Eigen/Core>
#include <Eigen/Dense>
using namespace Eigen;

int main(int argc, char** argv)

Mat data;
int unique = data.rows;
VectorXd actualLabel(unique);
for(int i=0;i<unique;i++)

   for(int k = 0; k < train_label.cols; k++)
   
       int val = train_label.at<double>(i, k);
       actualLabel(i) = val;
       cout<< actualLabel(i) << endl;
    


return 0;

但在 Vector actualLable 处输出全部为 0。 如何从 Mat 数据中检索实际值?

【问题讨论】:

为什么在写之前把值存入int变量? @user3896254 你能具体告诉我我应该在哪里改变吗? int val = train_label.at&lt;double&gt;(i, k);double val = train_label.at&lt;double&gt;(i, k); 【参考方案1】:

我在这里找到了解决方案想分享完整的程序

#include <opencv2/core.hpp>
#include <opencv2/opencv.hpp>
#include <vector>
#include <set>
#include <Eigen/Core>
#include <Eigen/Dense>
using namespace Eigen;

int main(int argc, char** argv)

//example if data with assigned value 
Mat kern = (Mat_<double>(8, 1) << 0, -1, 0,-1, 5, -1,0, -1);
cout << kern << endl;
int unique = data.rows;
VectorXd actualLabel(unique);
for(int i=0;i<unique;i++)

   for(int k = 0; k < train_label.cols; k++)
   
       double val = train_label.at<Vec2d>(i, k)[0];
       actualLabel(i) = val;
       cout<< actualLabel(i) << endl;
    


return 0;

如果有什么我仍然可以用最短的代码改进,请发表评论。 谢谢

【讨论】:

以上是关于Opencv C++读取分配给特征向量的opencv Mat的主要内容,如果未能解决你的问题,请参考以下文章

C++特征值/向量分解,只需要快速的前n个向量

如何在 C++ 中随机分配给向量?

在运行时将指针推送到向量 C++

将值从向量分配给动态数组(C++)

使用 OpenCV 将视频帧读取到指定的指针(C++)

在opencv(C++)中从caffe读取多维数组