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.
InformationsquelleAutor supergranu | 2010-09-08