了解opencv中的Mat

Understand Mat in opencv

本文关键字:Mat 中的 opencv 了解      更新时间:2023-10-16

我正在尝试理解以下代码Take from:Opencv-Mat更确切地说,这部分:

Mat labels(0, 1, CV_32FC1);
Mat trainingData(0, dictionarySize, CV_32FC1);

根据我的理解,labels等价于std::vector<float>trainingData等价于std::vector<std::vector<float>>,其中std::vector<float>的维数为dictionarySize。这是正确的吗?

我问这个问题是因为我想将bowDescriptor1(即MAT)转换为std::vector<float>


bowDescriptor1转换为矢量:

   std::vector<float> data;
   for(size_t r = 0; r < bowDescriptor.rows;r++)
    {
       for(size_t c = 0; c < bowDescriptor.cols;c++)
       {
          data.push_back(bowDescriptor.at<float>(r,c));
        }
     }

未经测试:

从文档中可以看到bowDescriptor似乎是一个大小为1 x dictionarySize的矩阵http://docs.opencv.org/modules/features2d/doc/object_categorization.html#bowimgdescriptorextractor-描述符大小

所以你必须遍历这个矩阵,并将每个元素(浮点)保存到你的vector<float>

试试这个代码:

std::vector<float> currentBowDescriptor;
for(int col = 0; col < bowDescriptor1.cols; ++col)
{
    currentBowDescriptor.push_back(bowDescriptor.at<float>(0,col));
}

就是这样。如果你愿意的话,把当前的BowDescriptor推到另一个向量上。

如果你想节省一些计算时间,你甚至可以提前初始化currentBowDescriptor,因为你知道描述符值的数量(dictionarySize),并访问这些元素,而不是向后推。

希望这能有所帮助。