如何将cv::Mat转换为浮点指针
How do I convert an cv::Mat to float pointer?
我想将cv::SIFT
描述符cv::Mat descriptors
的矩阵表示为float*
。这是因为我想使用VLFeat的GMM(如果你有更好的解决方案,请告诉我)。这是我想出的代码:
if(!prova.isContinous()){
std::err<<"Descriptor matrix not continuous!"<<std::endl;
return 1;
}
float *data = new float[desc.total()];
std::memcpy(data,prova.data,prova.total() * sizeof(float));
用玩具矩阵尝试这个代码:
cv::Mat prova = (cv::Mat_<float>(3,3) << 0.1, 0.3, 2.1, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8);
并打印值:
for(int i=0;i<prova.total();i++)
std::cout<<*(data+i)<<std::endl;
这很好,但既然我们在处理指针(这总是一件危险的事情),我想听听意见。
注意:只是为了给出一个上下文,这就是我将如何使用data
:
VlGMM* gmm = vl_gmm_new(VL_TYPE_FLOAT, desc.cols, 2) ;
vl_gmm_cluster (gmm, data, desc.rows);
您可以使用Mat::ptr
方法来获取指向任何行开头的浮点指针。具体来说,矩阵的开头是:
const float* buffer=desc_mat.ptr<float>(0);
如果步幅不等于列数*4可能发生的问题
4=浮点大小,你可以在数据中得到洞,所以唯一可以确定的方法是逐像素复制
相关文章:
- 正在将指针转换为范围
- 如何理解将半精度指针转换为无符号长指针和相关的内存对齐
- C++:Lambda 函数指针转换的用例是什么?
- 如何将 int 指针转换为浮点指针
- 为什么在将 void 指针转换为整数指针时出现分段错误
- 将(N 个字节)无符号字符指针转换为浮点数和双 C++
- 我们可以在不知道其真实类型的情况下将基类指针转换为派生类指针吗?
- C++中数组大小未知的指针转换
- Antlr cpp 运行时 任何错误的指针转换?
- std::flush可以用于将对象指针转换为其封闭数组指针吗
- C 指针转换会导致内存访问冲突
- 模板类实例化中的指针转换无效
- 函数调用歧义(用户定义的转换和 Derived2Base 指针转换)
- 如何将 void(*)() 类型的指针转换为 void*
- 数组到指针转换期间的临时具体化
- 直接为浮点变量分配十六进制整数与通过指针转换分配之间的区别
- 将基类指针转换为派生的类指针
- 应对 std::字符串中的 std::<char>指针转换后的向量
- 在编译时将函数指针转换为 std::uintptr_t
- 将基类指针转换为未知派生类指针