【发布时间】:2010-09-08 15:57:19
【问题描述】:
我想使用 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
【问题讨论】:
-
发布你的代码 - 这样这里的人可以帮助你让它工作。还要更详细地描述问题 - 特别是它是如何失败的。
-
您的问题中有一个死链接。