需要在单独的图像中获取边界框的内容

时间:2013-11-06 13:33:52

标签: c++ opencv image-processing computer-vision

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

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我调整边界框的大小。该代码用于实时处理。

2 个答案:

答案 0 :(得分:0)

我担心你会把两个定义搞得一团糟:从图像上绘制图像和裁剪感兴趣的区域。

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

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

答案 1 :(得分:0)

从您创建的新Rect创建Point应该像执行一样简单:

Rect rect2(pt1, pt2);

这个api表示你可以从这两个点构造一个矩形。

那是你想做的吗?

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

Point pt1(rect.x - 100, rect.y);
Point pt2(rect.x + rect.width + 100, rect.y + rect.height);