如何将OpenCV cv::Mat
转换为可以输入float*
的{{1}}?
我无法理解Vlfeat vl_dsift_process
如何在一维浮点数组上工作。
官方样本仅演示了如何使用MatLab API。
似乎没有关于C API的示例,唯一的线索是源包中的MEX文件。
答案 0 :(得分:12)
float* matData = (float*)myMat.data;
在使用指向数据的指针之前,确保矩阵未被删除/超出范围。并确保矩阵包含浮点数。
答案 1 :(得分: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]);