J'essaie de visualiser la sortie de calcOpticalFlowPyrLK()
(OpenCv v3.0.0). Je n'essaie pas de dessiner l'image entière avec le flux optique, seulement la flèche de direction. Le problème est, je ne peux pas arriver à la sortie comme dans les exemples. Toutes les 10 images je renouvelle les points pour le calcul du flux. La fonction elle-mêmeVisualisation de flux optique
calcOpticalFlowPyrLK(CentroidFrOld, CentroidFrNow, mc, CornersCentroidNow, feat_found, feat_errors, Size(15, 15), 2, cvTermCriteria(CV_TERMCRIT_ITER | CV_TERMCRIT_EPS, 10, 0.03), 0);
Lorsque CentroidFrOld
est cadre en échelle de gris, CentroidFrNow
est cadre en échelle de gris + 1, mc
est une matrice de points vector<Point2f>
et CornersCentroidNow
est un tableau vide en attente d'être rempli avec de nouveaux points.
Quand les dessin-je utiliser un code simple:
for (size_t i = 0; i < CornersCentroidNow.size(); i++){
if (feat_errors[i] > MAX_ERR || feat_found[i] == 0) continue;
Point p0(ceil(mc[i].x), ceil(mc[i].y)); // are the points of interest (centroids of contours)
Point p1(ceil(CornersCentroidNow[i].x), ceil(CornersCentroidNow[i].y));
arrowedLine(empty, p0, p1, Scalar(0, 0, 255), 2, 8, 0, 0.2);
}
après ce bloc de code. Quand je les dessine chaque image que je reçois cette sortie:
Si je mets à jour l'image précédente utilisé pour calcOpticalFlowPyrLK()
fonction
CentroidFrOld = CentroidFrNow.clone();
Je reçois cette sortie (la ligne est courte et il se déplace foward tous les 10 cadres - comme ensemble pour obtenir de nouveaux points)
Si les points précédents se trouvent les points suivants et
CentroidFrOld = CentroidFrNow.clone();
mc = CornersCentroidNow;
Je reçois cette sortie (la ligne est courte, mais il se déplace avec l'objet)
La sortie souhaitée, je ne peux pas obtenir est
Ai-je besoin de allonger manuellement la ligne? Personne ne fait donc dans les exemples similaires de implemantation de flux optique
double possible de [Comment dessiner des images de flux optique de OCL :: PyrLKOpticalFlow :: dense()] (http://stackoverflow.com/questions/ 20064818/comment-dessiner-optical-flow-images-from-oclpyrlkopticalflowdense) – Miki
Complètement sans rapport - Je n'essaie pas de dessiner l'image entière avec OF et l'algorithme proposé à la fin de la poste est fondamentalement le même que moi, mais dans la version plus récente d'Opencv, en 2013 il y avait la version 2.3.1, complètement différente de celle qui est maintenant – Croolman
, vous aurez besoin de montrer plus de code pour résoudre ce problème - en particulier l'appel réel à la fonction 'calcOpticalFlowPyrLK' . Si vous le configurez correctement, vous devez dessiner des lignes entre les points du tableau 'prevPts' et du tableau' nextPts'. Je vous recommande de réduire 'flowedLine' à un dessin' line' plus simple pendant le débogage - ces lignes courtes peuvent être des pointes de flèches épinglées. – foundry