如何验证rect是否在OpenCV中的cv::Mat内部
How to verify if rect is inside cv::Mat in OpenCV?
Opencv中有类似cv::Mat::contains(cv::Rect)
的东西吗?
背景:在将对象检测为轮廓并尝试使用cv::boundingRect访问ROI后,我的应用程序崩溃了。好吧,这是因为靠近图像边界的对象的边界矩形可能不完全在图像内。
现在我跳过这个检查不完全在图像中的对象:
if(
cellRect.x>0 &&
cellRect.y>0 &&
cellRect.x + cellRect.width < m.cols &&
cellRect.x + cellRect.width < m.rows) ...
其中cellRect是对象的边界矩形,m为图像。我希望有一个专门的opencv功能。
简单的方法是使用AND(即&
)运算符。
假设您想检查cv::Rect rect
是否在cv::Mat mat
:内
bool is_inside = (rect & cv::Rect(0, 0, mat.cols, mat.rows)) == 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
这里有一个判断矩形是否包含其他矩形的方法。您可以从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;
}
相关文章:
- C++中的openCV Mat访问冲突
- 本机库中的 OpenCV 创建错误
- 如何使用2通道垫子中的OPENCV中使用SVM
- 如何在 Unity Android 应用程序中的 OpenCV 中使用 ARCore 相机图像
- 调试一种方法,用于使用C 中的OpenCV从视频中查找帧的平均帧
- 使用颜色校正矩阵中的OpenCV颜色校正
- 通过插座读取Python中的OpenCV图像
- Android中的OpenCV 4.0.1链接失败
- 方法参数中的 OpenCV 垫"预期")""
- C++圆形区域中的 Opencv 对象检测
- Java 运行时环境检测到致命错误:Java 中的 OpenCV 椭圆检测
- 图像搜索(C )中的OPENCV图像
- Java中的OPENCV现有C 代码
- 代码中的 OpenCV 错误
- ubuntu 12.04 中的 openCV 程序编译错误"libopencv_core.so.2.4: cannot open shared object file: No such file or
- Linux/Ubuntu中的OpenCV安装
- 跟踪器示例中的OpenCV 3.0链接器错误
- eclipse中的OpenCV设置
- 多线程环境 (OpenMP) 中的 OpenCV 会导致分段错误
- Visual Studio 中的 OpenCV 构建错误