0

我写了一段代码,它在感兴趣的对象周围绘制了一个边界框。下一步是调整边界框的大小,这样我就有了一点背景。现在我想在单独的图像中获取边界框的内容,以便处理这个感兴趣的区域。我写的代码是:

findContours(Sal11, Objects, CV_RETR_LIST, CV_CHAIN_APPROX_NONE);

       //Kleine contouren verwijderen.
       for(unsigned int i = 0; i < Objects.size(); i++)
       {
           if (Objects[i].size() > 250 && Objects[i].size() < 500)
               Objects2.push_back(Objects[i]);
       }

       cv::Mat Person=input;
       // Bounding Box
       for(unsigned int i = 0; i < Objects2.size(); i++)
       {
           Rect rect = boundingRect(Objects2[i]);
           Point pt1, pt2;
           pt1.x = rect.x - 100;
           pt1.y = rect.y;
           pt2.x = rect.x + rect.width + 100;
           pt2.y = rect.y + rect.height;
           rectangle(input, pt1, pt2, CV_RGB(0,0,255), 1);
           cout << rect << endl;

           Rect rect2;
           Person = input(rect);
       }

rect2现在不做任何事情,但我希望它是rect. 和我调整边界框的大小pt1pt2该代码用于实时处理。

4

2 回答 2

0

恐怕你把两个定义搞混了:在图像上绘图和从图像中裁剪感兴趣的区域。

1) OpenCV 中的函数“矩形”在给定图像上绘制一个矩形。

2) 'Person=input(rect)' 创建'input' 的子图像。您可以像使用“输入”图像一样使用它。请记住,它没有执行任何图像副本,即它是在 O(1) 中完成的,并且“Person”像素的任何变化都会改变“输入”的适当像素。

于 2013-11-06T14:05:56.763 回答
0

Rect从新创建的Points 中创建 a 应该很简单:

Rect rect2(pt1, pt2);

这个api声明你可以像这样从两点构造一个矩形。

那是你想做的吗?

另外,我会考虑使用构造函数创建新点,如下所示:

Point pt1(rect.x - 100, rect.y);
Point pt2(rect.x + rect.width + 100, rect.y + rect.height);
于 2013-11-06T14:10:02.900 回答