将一行cv::Mat转换为int类型
Convert a row of cv::Mat to an int
我有一个来自FREAK描述提取的描述符矩阵,其中每行是64个元素的描述符。
由于系统需求,我需要从这个矩阵创建一个vector <int*>
。我试过了:
Mat _descriptors;
std::vector<int*> descriptors;
int row;
for (int i=0; i<_descriptors.rows;i++)
{
row =(int) _descriptors.row(i).data;
descriptors.push_back( & row );
}
这是正确的还是有更好的方法?
descriptors
中的所有值都指向堆栈上的变量row
。
查看opencv Mat
的定义,row
按值返回:
// returns a new matrix header for the specified row
Mat row(int y) const;
直接访问_descriptors
中的数据并使用所提供的stride成员变量step
步进应该可以工作:
Mat _descriptors;
std::vector<int*> descriptors;
for (int i=0; i<_descriptors.rows;i++)
{
descriptors.push_back((int*)(_descriptors.data + i * _descriptors.step));
}
当您为矢量descriptors
创建一个新对象时,您正在创建一个具有row
变量地址的对象,而不是它的实际值。要存储该值,如果这是您想要的值,则代码应该如下所示。
Mat _descriptors;
std::vector<int> descriptors;
int row;
for (int i=0; i<_descriptors.rows;i++)
{
row =(int) _descriptors.row(i).data;
descriptors.push_back( row );
}
我还将vector<int*> descriptors
更改为vector<int> descriptors
。
相关文章:
- 将 cv::mat 转换为 QImage
- 将 cv::Mat 转换为 std::vector 的通用函数
- 如何将 cv::Mat 转换为 vtkImageData?
- Qt-工作线程崩溃时将cv::Mat转换为QImage
- 将 cv::Mat 转换为无符号的 int 像素
- 如何在不复制数据的情况下将 cv::Mat 转换为 2d 标准::矢量
- 转换 cv::mat 转换为 std::矢量<double>并发症
- 将CV :: MAT转换为STD :: vector而无需复制
- 如何将cv::Mat转换为带有颜色的pcl::点云
- 将 cv::Mat 转换为穿山甲::图像
- c++ OpenCV:将mat转换为base64,反之亦然
- 将 OpenCV Mat 转换为 array(可能是 NSArray)
- 如何在OpenCV 3.0中将Mat转换为cvMat
- 如何将'cv::Mat'转换为"双倍"?
- Lib-svm,如何将MyModel.mat转换为MyModel.model
- 如何将简历::Mat转换为简历::Rect
- 错误 C2664:'cvSaveImage':无法将参数 2 从 'cv::Mat' 转换为 'const CvArr *'
- OpenCV表单应用程序 - 将Mat转换为灰度
- OpenCV:将 Mat 转换为 UChar4
- 使用 QImage::loadFromData 将 cv::mat 转换为 QImage