cv::goodFeaturesToTrack ne reprend pas toutes les fonctionnalités

Je suis en train d'utiliser cv::calcOpticalFlowPyrLK mais parfois une assertion interne dans la fonction échoue. L'affirmation est npoints = prevPtsMat.checkVector(2, CV_32F, true)) >= 0. Je suis à l'aide d'OpenCV 2.3.1. Le code source de cette fonction est disponible ici.

Il est difficile pour envelopper ma tête autour de leur code, surtout à cause de mon peu d'expérience avec l'informatique graphique et de leur manque de commentaires. Pourquoi cette affirmation est-elle déclenchée et que fait-il dire à propos de mon problème?

Modifier: j'ai appeler la fonction comme suit:

cv::calcOpticalFlowPyrLK(curBwFrame, prvFrame, features, newFeatures, trackingStatus, errors);

J'ai trouvé que la features vecteur, qui a été obtenu par l'appel de cv::goodFeaturesToTrack(curBwFrame, features, 5, 0.2, 0.5, skinMask); avec un non-vide masque qui semble être suffisamment grand et une image valide, ne contient pas toutes les fonctionnalités. Comment cela peut-il arriver?

curBwFrame

cv::goodFeaturesToTrack ne reprend pas toutes les fonctionnalités

skinMask

cv::goodFeaturesToTrack ne reprend pas toutes les fonctionnalités

Je suis en mesure de reproduire le problème à l'aide de l'extrait de code suivant:

#include <vector>
#include <cassert>
#include <opencv2\opencv.hpp>
using std::vector;
using namespace cv;

int main() {
    vector<Point2f> features;
    cv::Mat curBwFrame = imread("curBwFrame.png");
    cv::cvtColor(curBwFrame, curBwFrame, CV_RGB2GRAY);
    imwrite("test.png", curBwFrame);

    cv::Mat skinMask = imread("skinMask.png");
    cv::cvtColor(skinMask, skinMask, CV_RGB2GRAY);
    imwrite("test.png", skinMask);

    cv::goodFeaturesToTrack(curBwFrame, features, 5, 0.2, 0.5, skinMask);
    assert(features.size() > 0);

    return 0;
}
Les assertions vérifie que l'argument d'entrée est un vecteur de points. Et il est difficile de répondre à votre question sans votre code.
J'ai ajouté plus d'informations ci-dessus, mais je ne suis pas sûr de ce que d'autres renseignements pertinents. Je pourrais dump quelques gros fragments de code ici, mais il est probable qu'ils contient beaucoup d'informations non pertinentes.
Désolé pour mon mélanger des appels de fonction plus tôt. J'ai ajouté le bon extrait ci-dessus! Je peux poster le masque et l'image source pour goodFeaturesToTrack trop si c'est nécessaire.

OriginalL'auteur Pieter | 2012-06-05