vl_dsift_processが1次元の浮動小数点配列でどのように動作するかはわかりません。
DSIFTは、ピクセル(x、y)の輝度がfloat_array [y * width + x]にfloat値として格納されているグレースケール画像を期待しています。 OpenCVでは、画像は符号なしの文字として格納されるため、Mat :: dataからfloat *への単純な変換は機能しません。すべての値を浮動小数点に手動で変換する必要があります:
Mat mat = imread("image_name.jpg", 0);//0 stands for grayscale
vector img;
for (int i = 0; i < mat.rows; ++i)
for (int j = 0; j < mat.cols; ++j)
img.push_back(mat.at(i, j));
vl_dsift_process(dsift, &img[0]);