了解opencv中的Mat
Understand Mat in opencv
我正在尝试理解以下代码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),并访问这些元素,而不是向后推。
希望这能有所帮助。
相关文章:
- C++中的openCV Mat访问冲突
- 使用 mat.at<uchar>(i,j) 的 opencv C++中的矩阵赋值错误
- openCV Mat 中的值在自定义类构造函数中设置后不会保留
- 在不复制数据的情况下更改 opencv mat 中的列顺序
- 如何在自己的函数中最好地处理Mat中的不同数字格式
- C++ |使用 setTo 更改 cv::mat 中的颜色
- 指向 OpenCV / C++ 中 Mat 中的最后一个元素
- cv::Mat中的地址错误
- 使用最小值和最大值缩放 Mat 中的每个单元格
- 自动释放 Mat 中的用户数据.可能吗
- 从cv::Mat中的cv::Point的矢量转换轮廓
- 在openCV中访问mat中的元素时获取垃圾值
- 使用pcl将存储在Mat中的深度图转换为点云
- 如何在OpenCV中访问多维Mat中的2D矩阵
- 如何在创建时强制cv::Mat中的数据类型为float ?
- 如何简洁地将cv::Mat中的每个元素设置为一些标量,如cvSet
- 将cv::Scalar的值设置为opencv中cv::Mat中的一个像素的正确(最佳)方法是什么?
- OpenCV/ c++:将一个Mat中的行/列复制到另一个Mat中
- 访问OpenCV Mat中的多个通道
- 访问多通道OpenCV Mat中的元素