Я предполагаю из того, что вы написали, что вы хотите найти среднее смещение всех характерных точек между двумя кадрами. В этом случае все, что вам нужно сделать, это вычислить «гипотенузу» в цикле над объектами, сложить все их значения, а затем разделить на количество объектов.
Хорошо, вот ваш ответ:
cvCalcOpticalFlowPyrLK(frame1_1C, frame2_1C, pyramid1, pyramid2, frame1_features, frame2_features, corner_count, optical_flow_window, 5, optical_flow_found_feature, NULL, optical_flow_termination_criteria, NULL);
//here the features that I extract them
double sumOfDistances = 0;
for(int i = 0; i < corner_count; ++i)
{
int x1 = (int) frame1_features[i].x;
int y1 = (int) frame1_features[i].y;
int x2 = (int) frame2_features[i].x;
int y2 = (int) frame2_features[i].y;
int dx = x2 - x1;
int dy = y2 - y1;
sumOfDistances += sqrt(dx * dx + dy * dy);
}
double averageDistance = sumOfDistances / corner_count;
Я предполагаю, что corner_count
- это число функций. Вы должны убедиться, что это действительно правильно. Кроме того, я не пытался скомпилировать это. Если бы я допустил какие-либо ошибки, вы бы их исправили.
Однако, если вы планируете выполнять обработку изображений не только один раз, я советую вам на самом деле научиться программированию. То, что я сделал здесь, очень элементарно. Без понимания этого для себя вы не уйдете очень далеко.