在Opencv中有类似cv::Mat::contains(cv::Rect)的东西吗?
背景:在检测对象为轮廓并尝试使用cv::访问ROIs之后,应用程序崩溃了。好的,那是因为靠近图像边框的物体的边框可能不完全在图像中。
现在,通过下面的检查,我跳过了不完全在图像中的对象:
if(
cellRect.x>0 &&
cellRect.y>0 &&
cellRect.x + cellRect.width < m.cols &&
cellRect.x + cellRect.width < m.rows) ...其中cellRect是物体的边界,m是图像。我希望有一个专门的opencv功能。
发布于 2015-09-01 06:02:39
简单的方法是使用和(即操作符)。
假设您想检查cv::Rect rect是否在cv::Mat mat中
bool is_inside = (rect & cv::Rect(0, 0, mat.cols, mat.rows)) == rect;发布于 2015-03-18 13:09:39
您可以创建rect“表示”(x,y= 0,宽度和高度等于图像的宽度和高度)图像,并检查它是否包含轮廓的边框。要实现这一点,您需要使用rect交集--在OpenCV中非常简单,只需使用rect1 & rect2。希望该守则明确指出:
cv::Rect imgRect = cv::Rect(cv::Point(0,0), img.size());
cv::Rect objectBoundingRect = ....;
cv::Rect rectsIntersecion = imgRect & objectBoundingRect;
if (rectsIntersecion.area() == 0)
//object is completely outside image
else if (rectsIntersecion.area() == objectBoundingRect.area())
//whole object is inside image
else
//((double)rectsIntersecion.area())/((double)objectBoundingRect.area()) * 100.0 % of object is inside image发布于 2017-06-09 06:33:21
下面是一种判断矩形是否包含其他矩形的方法。您可以从cv::Mat first获取大小信息,然后使用下面的方法:
public bool rectContainsRect(Rectangle containerRect, Rectangle subRect)
{
if( containerRect.Contains(new Point(subRect.Left, subRect.Top))
&& containerRect.Contains(new Point(subRect.Right, subRect.Top))
&& containerRect.Contains(new Point(subRect.Left, subRect.Bottom))
&& containerRect.Contains(new Point(subRect.Right, subRect.Bottom)))
{
return true;
}
return false;
}https://stackoverflow.com/questions/29120231
复制相似问题