c++ - 如何将 cv::Mat 转换为浮点指针?

标签 c++ c opencv memcpy vlfeat

我想将 cv::SIFT 描述符 cv::Mat 描述符 的矩阵表示为 float*。这是因为我想使用 GMM from VLFeat (如果您有任何更好的解决方案,请告诉我)。这是我想出的代码:

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;

这工作正常,但由于我们正在处理指针(而且它总是一件危险的事情)我想听听意见。

注意:只是为了提供上下文,这就是我将如何使用数据:

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);

关于c++ - 如何将 cv::Mat 转换为浮点指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38497163/

相关文章:

c++ - 使用 opencv/c++ 应用 canny 边缘检测器后出现 "Unhandled exception"错误

c++ - 从一个值和一个大小创建递归函数参数列表

c++ - C++ 中的参数和函数问题

c - 当其中一个线程收到信号并且没有一个线程阻止它时,是否所有线程都停止了?

c - 程序仅在最后一个输入上循环

image-processing - FindFundamentalMatrix 找不到基本矩阵

c++ - 多态性和 shared_ptr 通过引用传递

c++ - boost read_xml 问题解析字符串?

C++获得最高考试成绩并使用指针

android - Utils.matToBitmap 中的 src.type 断言失败