jus*_*rld 3 c c++ opencv memcpy vlfeat
我想将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));
Run Code Online (Sandbox Code Playgroud)
使用玩具矩阵尝试此代码:
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);
Run Code Online (Sandbox Code Playgroud)
并打印值:
for(int i=0;i<prova.total();i++)
std::cout<<*(data+i)<<std::endl;
Run Code Online (Sandbox Code Playgroud)
这工作得很好,但由于我们正在处理指针(这总是一个危险的事情),我想听听意见。
注意:只是为了提供上下文,这就是我将要使用的方式data:
VlGMM* gmm = vl_gmm_new(VL_TYPE_FLOAT, desc.cols, 2) ;
vl_gmm_cluster (gmm, data, desc.rows);
Run Code Online (Sandbox Code Playgroud)
您可以使用该Mat::ptr方法获取指向任意行开头的浮点指针。具体来说,矩阵的开头是:
const float* buffer=desc_mat.ptr<float>(0);
Run Code Online (Sandbox Code Playgroud)