Я не можу зрозуміти, як vl_dsift_process працює на одномірному плаваючому масиві
DSIFT очікує зображення у градаціях сірого, де інтенсивність пікселя (x, y) зберігається в float_array [y * width + x] як значення float. У OpenCV зображення зберігаються як непідписані символи, тому простої конверсії Mat :: даних для плавання * не працюватимуть. Вам потрібно вручну перетворити кожне значення на плаваюче:
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]);