Comment trouver les contours d'une image à partir d'un appareil photo Android et de les convertir en box2d corps?
À l'aide de OpenFrameworks, OpenCV et Box2D j'ai été en mesure de le réaliser avec un bon framerate. En utilisant Android semble beaucoup plus compliqué que la tâche (en partie parce que je suis un JAVA débutant).
C'est de cette façon que j'ai commencé:
-
Utiliser le "OpenCV Échantillon - manipulations d'image" et de supprimer tout sauf le "savant", qui produit un beau noir & blanc de l'image qui est parfait pour trouver les contours.
public Mat onCameraFrame(CvCameraViewFrame inputFrame) { mRgba = inputFrame.rgba(); Imgproc.Canny(mRgbaInnerWindow, mIntermediateMat, 50, 100); Imgproc.cvtColor(mIntermediateMat, mRgbaInnerWindow, Imgproc.COLOR_GRAY2BGRA, 4); return mRgba; }
-
De la "OpenCV Échantillon - couleur-blob-détection" j'ai saisi la logique pour trouver les contours d'une Natte:
//These two lines are actually in the function onCameraViewStarted mHierarchy = new Mat(); CONTOUR_COLOR = new Scalar(255,0,0,255); //These lines are in function onCameraFrame List<MatOfPoint> contours = new ArrayList<MatOfPoint>(); Imgproc.findContours(mRgbaInnerWindow, contours, mHierarchy, Imgproc.RETR_EXTERNAL, Imgproc.CHAIN_APPROX_SIMPLE); Imgproc.drawContours(mIntermediateMat, contours, -1, CONTOUR_COLOR);
Donc, ma fonction actuelle ressemble à ça et ça ne fonctionne pas:
public Mat onCameraFrame(CvCameraViewFrame inputFrame) { mRgba = inputFrame.rgba(); if ((mRgbaInnerWindow == null) || (mGrayInnerWindow == null) || (mRgba.cols() != mSizeRgba.width) || (mRgba.height() != mSizeRgba.height)) CreateAuxiliaryMats(); Imgproc.Canny(mRgbaInnerWindow, mIntermediateMat, 50, 100); //Imgproc.cvtColor(mIntermediateMat, mRgbaInnerWindow, Imgproc.COLOR_GRAY2BGRA, 4); List<MatOfPoint> contours = new ArrayList<MatOfPoint>(); Imgproc.findContours(mRgbaInnerWindow, contours, mHierarchy, Imgproc.RETR_EXTERNAL, Imgproc.CHAIN_APPROX_SIMPLE); //Imgproc.drawContours(mIntermediateMat, contours, -1, CONTOUR_COLOR); return mRgba; }
-
Maintenant, c'est là où je suis coincé. Je continue à faire des exceptions et je pense que je ne suis pas en utilisant les bonnes dimensions ou en transformant le Tapis pour le droit de l'espace couleur. Ce post a un aperçu, mais je ne sais pas si c'est correct: OpenCV sur Android findContours throws Exception
J'ai été à la recherche à AndEngine, mais je ne sais pas encore comment mettre en œuvre la CVCamera de classe avec le SimpleGameActivity de AndEngine.
OriginalL'auteur Joan Mira | 2013-04-19
Vous devez vous connecter pour publier un commentaire.
Salut, je suis aussi un débutant dans openCV toutefois, ce code peut aider,
Je sais que cela peut ne pas être la meilleure manière d'y parvenir, mais nous sommes tous ici pour apprendre de nouvelles manières 🙂
OriginalL'auteur Shubhang Malviya
Réponse courte: Vous devez utiliser le résultat de
Canny
en entrée (1er argument) pourfindContours
, c'est à direOriginalL'auteur user1712200