如何将OpenCV cv :: Mat转换为可以送入Vlfeat vl_dsift_process的float*?

Jia*_* Ma 6 c opencv computer-vision

如何将OpenCV cv::Mat转换为float*可以输入的Vlfeat vl_dsift_process?我无法理解vl_dsift_process一维浮点数组的工作原理.官方样本仅演示了如何使用MatLab API.似乎没有关于C API的示例,唯一的线索是源包中的MEX文件.

Sam*_*Sam 12

float* matData = (float*)myMat.data;

在使用指向数据的指针之前,确保矩阵未被删除/超出范围.并确保矩阵包含浮点数.


use*_*855 5

我无法理解vl_dsift_process如何在一维浮点数组上工作

DSIFT期望一个灰度图像,其中像素(x,y)的强度存储在float_array [y*width + x]中作为浮点值.在OpenCV中,图像存储为无符号字符,因此Mat :: data到float*的简单转换将不起作用.您必须手动将每个值转换为float:

Mat mat = imread("image_name.jpg", 0); // 0 stands for grayscale

vector<float> img;
for (int i = 0; i < mat.rows; ++i)
  for (int j = 0; j < mat.cols; ++j)
    img.push_back(mat.at<unsigned char>(i, j));

vl_dsift_process(dsift, &img[0]);
Run Code Online (Sandbox Code Playgroud)