簡體   English   中英

如何將 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= float 的大小,您可能會在數據中出現空洞,因此唯一可以確定的方法是逐像素復制

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM