Я хочу получить ограничивающий прямоугольник из закрашенного черного круга на белом фоне, используя opencv BoundingRect.Я использовал пример кода из http://cgi.cse.unsw.edu.au/~cs4411/wiki/index.php?title=OpenCV_Guide#Finding_bounding_boxes_around_regions_of_a_binary_image, но не смог получить свойства ограничивающего прямоугольника и нарисовать его на изображении.Думаю, это должно быть простой проблемой, но все же я не могу это сделать ...
Было бы неплохо, если бы вы могли записать пример кода.
Спасибо.
В данный момент я использую изображение размером 1392x1040 пикселей с большим черным кружком посередине (диаметр около 1000 пикселей), а остальное изображение белое.
Мой источниккод:
#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;
}
Вывод, который я получаю из программы:
601
201
1390
1038