la moyenne du stream optique

Je veux trouver la moyenne du stream optique, je pourrais extraire les entités de la première image et trouver leur emplacement dans l’image suivante. Maintenant, je veux trouver la moyenne du déplacement afin de traduire l’image vers son arrière-plan immobile afin de stabiliser l’image.

// here I take the optical flow 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 for( int i=0; i < corner_count; i++ ) { CvPoint p,q; if ( optical_flow_found_feature[i] == 0 ) continue; px = (int) frame1_features[i].x; py = (int) frame1_features[i].y; qx = (int) frame2_features[i].x; qy = (int) frame2_features[i].y; double angle = atan2( (double) py - qy, (double) px - qx ); double hypotenuse = sqrt( square(py - qy) + square(px - qx) ); 

Maintenant, je veux prendre la moyenne pour eux, et si vous voulez que je vous montre plus de code, je suis prêt à le faire.

Corner_count est le nombre de fonctionnalités.

Je suppose d’après ce que vous avez écrit que vous voulez trouver le déplacement moyen de tous les points caractéristiques entre les deux frameworks. Dans ce cas, tout ce que vous avez à faire est de calculer “l’hypoténuse” dans une boucle sur les entités, d’append toutes ses valeurs et de diviser par le nombre d’entités.

Ok, voici ta réponse:

 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; 

Je suppose ici que corner_count est le nombre de fonctionnalités. Vous devez vous assurer que c'est effectivement le cas. De plus, je n'ai pas essayé de comstackr ceci. Si j'avais commis des erreurs, ce serait à vous de les réparer.

Cependant, si vous envisagez de traiter plus d'images qu'une seule fois, je vous suggère d'apprendre réellement à programmer. Ce que j'ai fait ici est très simple. Sans comprendre cela pour vous-même, vous n'irez pas très loin.