Boîte englobante à l'aide d'OpenCV
Je veux obtenir la boîte englobante d'une fois rempli, un cercle noir sur fond blanc à l'aide d'opencv BoundingRect. J'ai utilisé l'exemple de code à partir de http://cgi.cse.unsw.edu.au/~cs4411/wiki/index.php?title=OpenCV_Guide#Finding_bounding_boxes_around_regions_of_a_binary_image, mais a échoué à obtenir les propriétés de la boîte de délimitation et de le mettre dans l'image. Doit être un problème simple, je pense, mais encore je ne pas le faire...
Serait sympa, si vous pouviez écrire un exemple de code.
Grâce.
L'image que j'utilise en ce moment est une image de 1392x1040 pixels avec un grand cercle noir au milieu (diamètre d'environ 1000 pixels) et le reste de l'image est blanc.
Mon code source est:
#include <iostream>
#include <vector>
#include <cv.h>
#include <highgui.h>
using namespace std;
int main(int argc, char** argv){
IplImage* img_in = cvLoadImage("Schwarzer_Kreis.png",1);
IplImage* img_working = cvCreateImage(cvGetSize(img_in), 8, 1);
cvCvtColor(img_in, img_working, CV_BGR2GRAY);
CvSeq* seq;
vector<CvRect> boxes;
CvMemStorage* storage = cvCreateMemStorage(0);
cvClearMemStorage(storage);
cvFindContours(img_working, storage, &seq, sizeof(CvContour), CV_RETR_EXTERNAL, CV_CHAIN_APPROX_NONE, cvPoint(600,200));
CvRect boundbox ;
for(; seq; seq = seq->h_next) {
boundbox = cvBoundingRect(seq);
boxes.push_back(boundbox);
}
for (int ii=0; ii<boxes.size(); ii++) {
cout << boxes[ii].x << endl;
cout << boxes[ii].y << endl;
cout << boxes[ii].width << endl;
cout << boxes[ii].height << endl;
}
cvWaitKey(0);
return 0;
}
Le résultat que j'geht du programme est:
601
201
1390
1038
- Poster votre code - de cette façon, les gens ici peuvent vous aider à obtenir ce travail. Aussi décrire le problème un peu plus en détail - en particulier la façon dont il échoue.
- Vous avez un lien mort dans votre question.
Vous devez vous connecter pour publier un commentaire.
Ce code utilise les fonctions d'OpenCV 2.1 "findContours" et "boundingRect" pour obtenir la boîte englobante d'un binarized de l'image (0 à 255), qui s'appuie sur le cadre de sélection. Éviter le bruit par le calcul de la boîte englobante autour de la forme de la zone de plus de.
Plus d'informations http://www.davidlopez.es/?p=65
area = v[i].size();
dans leif
déclaration qui vérifiearea < v[i].size()
?J'ai fait mon propre code pour le calcul de la boîte englobante:
vous pouvez dessiner à l'aide de
Vous pouvez envisager de prendre le négatif de l'image que vous avez(le cercle est en blanc sur un fond noir) et ensuite essayer votre code. La commande est cvNot(src, dst).
Certaines des fonctions OpenCV besoin en fond noir.