использование функции calcOpticalFlowPyrLK () в Visual Studio

0

Я пытаюсь проверить calcOpticalFlowPyrLK() int c++ в visual studio, но у меня возникли проблемы при написании кода. Я получаю ключевые точки моих двух изображений с помощью алгоритма FAST. Вот соответствующая часть моего кода:

    Mat im1, im1gray, im2, im2gray;
    vector<KeyPoint> keypoints1;
    vector<KeyPoint> keypoints2;
    im1=imread("C:\\Users\\Dániel\\Desktop\\1.png", 1);
    im2=imread("C:\\Users\\Dániel\\Desktop\\2.png", 1);
    cvtColor(im1, im1gray, CV_RGB2GRAY);
    FAST(im1gray, keypoints1, 100, true);
    cvtColor(im2, im2gray, CV_RGB2GRAY);
    FAST(im2gray, keypoints2, 100, true);
    vector<char> status;
    vector<float> error;
    calcOpticalFlowPyrLK(im1, im2, keypoints1, keypoints2, status, error, Size(20,20), 1, cvTermCriteria( CV_TERMCRIT_ITER | CV_TERMCRIT_EPS, 20, .3 ), 0, 0.0001); 

Моя проблема в том, что я получаю сообщение об ошибке (Необработанное исключение в 0x74fc4b32 в KLT.exe: исключение Microsoft c++: cv :: Исключение в ячейке памяти 0x008de7ac..), когда я пытаюсь запустить последнюю команду кода. Может ли кто-нибудь сказать мне, что может быть проблемой? Заранее спасибо!

Теги:
opencv

1 ответ

1
Лучший ответ

calcOpticalFlowPyrLK работает с vector<Point2f>, а не с vector<KeyPoint>. Вы должны преобразовать массив ключевых точек в массив с координатами:

vector<Point2f> pt1, pt2;
KeyPoint::convert(keypoints1, pt1);
KeyPoint::convert(keypoints2, pt2);
calcOpticalFlowPyrLK(im1, im2, pt1, pt2, status, error, Size(20,20), 1, cvTermCriteria( CV_TERMCRIT_ITER | CV_TERMCRIT_EPS, 20, .3 ), 0, 0.0001);
  • 0
    Спасибо, это работает сейчас! Другое дело, что мне пришлось использовать векторную ошибку <uchar> вместо векторной ошибки <char>.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню