c++ - 理解opencv中的Mat

标签 c++ opencv vector mat

我试图理解以下代码取自: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这是 MATstd::vector<float>


转换 bowDescriptor1到 vector :

   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-descriptorsize

因此您必须遍历该矩阵并将每个元素( float )保存到您的 vector<float>

试试这段代码:

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

就是这样。如果需要,将那些 currentBowDescriptor 推回另一个 vector 。

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

希望这对您有所帮助。

关于c++ - 理解opencv中的Mat,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22963262/

相关文章:

c++ - boost::ptr_vector<>::iterator 是否可以循环使用 while?

c++ - 在 opencv 中保存图像的奇怪行为

C++ vector 迭代器

matlab - 如何创建接受向量的多项式?

c++ - 模板类 : Check if complex at compile time

c++ - 异步事件 : already defined linker error [Windows Update API]

c++ - 为什么 QPainter 可能会拒绝在 paintEvent 内部工作?

如果所有邻居都是背景,则 OpenCV 二元过滤器将像素设置为背景

c# - 使用 EmguCV 进行全景图像拼接

java - 尝试打印 vector 的平均值时出错