Les Blobs avec OpenCV. La bibliothèque est le meilleur?
J'ai l'intention de commencer à expérimenter avec des gouttes en tant que C++ utilisateur, avec de l'expérience au cv::Mat de la OpenCV.
Maintenant la question est, les gouttes de la bibliothèque dois-je utiliser si?
J'ai vu ces solutions de rechange jusqu'à présent:
- cvBlobs (sur google code) -- c'est une bibliothèque c vraiment, travailler avec IplImage de sorte qu'il a besoin de sérieuses d'adaptation à c++.
- CvBlobsLib (sur willowgarage opencv page web) -- qui ressemble à une bibliothèque c++ mais il a une assez mauvaise docs avec beaucoup de choses à gauche inexpliquée et à peine un exemple de code.
- J'ai vu des cv::findContours, cv::moments et cv::drawContours dans le OpenCV 2.4.3 bibliothèque.
Que suggérez-vous comme un expert? Ma question pressante: quel sera le nouveau OpenCV couvre pas de cvBlobs sur google code?
Voici le lien pour le suivi de la question sur ce sujet, où je demande à propos de SimpleBlobDetector. Vous pourriez être intéressé.
Vous devez vous connecter pour publier un commentaire.
Vous devez utiliser le
SimpleBlobDetector
de la classe dans OpenCV 2.4. Vous avez assez bien créer un objet de typeSimpleBlobDetector
, puis d'appeler ladetect(cv::Mat input, vector<cv::KeyPoint> keypoints, cv::Mat mask)
fonction avec un cv::Mat de l'image en entrée, un vecteur vide pour keypoints, et un autre cv::Mat, comme option de masque pour une zone spécifique de l'image à regarder pour les keypoints dans.Noter que le cv::Mat objet a pris le relais de l'image et de la matrice de stockage obligation, pour toutes les anciennes de l'image et de la matrice de classes dans les versions antérieures de OpenCV.
Keypoint
classe (c'est à dire la sortie de la fonction de détection) contient la taille d'un diamètre de plus au centre de chaque goutte détecté. Aussi, dans le constructeur de laSimpleBlobDetector
, vous pouvez spécifier les couleurs désirées, la circularité, la superficie, la convexité, et l'inertie. Vous venez de mettre dans le constructeur de la manière suivante:SimpleBlobDetector myBlobDetector(bool filterByArea=true, float minArea=10, float maxArea = 100);
cv::SimpleBlobDetector::Params params; params.minDistBetweenBlobs = 10.0; params.filterByArea = true; params.minArea = 20.0; params.maxArea = 500.0; SimpleBlobDetector myBlobDetector(params);
Vous devriez jeter un oeil à la nouvelle opencvblobslib. Il a d'excellentes fonctionnalités comme les multi-core support.