我写了一段代码,它围绕感兴趣的对象绘制一个边界框。 下一步是调整边界框的大小,以便我有一点背景。 现在我想在单独的图像中获取边界框的内容,以便我可以处理这个感兴趣的区域。我写的代码是:
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
的内容。使用pt1
和pt2
我调整边界框的大小。该代码用于实时处理。
答案 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);