2013-04-26 2 views
0

Я делаю приложение opencv, и я использую алгоритм LucasKanada. Я использую эту функцию:Почему функция calcOpticalFlowPyrLK возвращает одно и то же значение?

calcOpticalFlowPyrLK(pregray, gray,points[0], points[1], status, err, Size(31,31),3, termcrit, 0, 0.001); 

вычислить новое положение точек, но например в точке [1] [2] имеет то же значение, что точка [0] [2], не меняется. Зачем?

+2

Пожалуйста, не публикуйте заголовки вопросов с вопросами о всех шапках. – Angew

+0

Что такое 'point'? Где это определено, где вы ссылаетесь на него? – Madbreaks

+0

Значения точек [0] [0], [0] [1] и [0] [2] установлены на Main, эта функция только вычисляет новые позиции этих точек и выдвигает свои позиции новостей в векторных точках [ 1] [x] – user2087826

ответ

1

Не видя, как вы инициализируете аргументы функции, сложно ответить на ваш вопрос. Но я предполагаю, что ваше изображение prevgray такое же, как gray.

Оператор копирования (то есть =) для объектов Mat будет копировать только заголовки и указатель на матрицу, а не сами данные. Если вы захватите изображения с камеры, обязательно скопируйте данные изображения. Что-то вроде этого:

VideoCapture cap; 
cap.open(0); 
Mat frame, gray, prevgray; 

for(;;) 
{ 
    cap >> frame; 
    gray = rgb2gray(frame); 

    calcOpticalFlowPyrLK(pregray, gray,points[0], points[1], status, err, 
     Size(31,31),3, termcrit, 0, 0.001); 

    gray.copyTo(prevGray); // make sure you copy the data 

    // if you do      
    // prevgray = gray; 
    // then in the next iteration gray and prevgray will point to the same data 
} 
Смежные вопросы