3 votes

CvtColor ne fonctionne pas correctement dans OpenCV pour Java

Alors j'essaie d'utiliser la méthode calcCopticalFlowPyrLK et elle ne cesse de renvoyer une erreur d'assertion :

Erreur OpenCV : Assertion a échoué ((npoints = prevPtsMat.checkVector(2, CV_32F, true)) >= 0) 

Et checkVector vérifie que la Matrice en entrée a 2 canaux et une profondeur de couleur de CV_32F. Mon entrée est une Mat avec 4 canaux et une profondeur de couleur de CV_8U. Lorsque j'essaie de la convertir, cela échoue à chaque fois. J'ai utilisé

Mat prevFrame; // La Matrice d'entree. Récupérée à partir de CvCameraViewFrame. Convertie en rgb

Mat prev = new Mat(rows,cols, CvType.CV_32F);
Imgproc.cvtColor(prevFrame, prev, Imgproc.COLOR_BGRA2GRAY);
prev.convertTo(prev, CvType.CV_32F);

Mais lorsque je vérifie par la suite, prev a la profondeur correcte (CV_32F) mais seulement 1 élément de canal. Je lutte avec cela depuis des heures et je n'arrive pas à comprendre quel est le problème

1voto

L'assertion a échoué sur le vecteur prevPtsMat qui est le troisième argument de l'appel à calcOpticalFlowPyrLK. Il semble que la matrice que vous définissez ici est le premier argument et qu'il devrait s'agir d'une image à canal unique comme c'est déjà le cas. http://docs.opencv.org/modules/video/doc/motion_analysis_and_object_tracking.html

Je suppose que vous utilisez un tableau de points pour le troisième argument et vous pourriez avoir besoin de créer explicitement un MatOfPoint2f() pour le tableau de points. Je pense que cela a été décrit dans : Android: Using calcOpticalFlowPyrLK with MatOfPoint2f

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X