c++ opencv 判断矩形A是否在矩形B内,且矩形A不能大于矩形B的面积
时间: 2024-01-15 08:05:40 浏览: 171
可以使用 OpenCV 中的 `Rect` 类型来表示矩形,然后通过相应的函数进行判断。具体的实现代码如下:
```c++
bool isInside(const cv::Rect& rectA, const cv::Rect& rectB)
{
if (rectA.area() > rectB.area())
return false; // 矩形 A 的面积大于矩形 B,直接返回 false
// 判断矩形 A 的四个顶点是否都在矩形 B 内
return rectB.contains(rectA.tl()) && rectB.contains(rectA.br()) &&
rectB.contains(rectA.tl() + cv::Point(rectA.width, 0)) &&
rectB.contains(rectA.tl() + cv::Point(0, rectA.height));
}
```
其中,`rectA.tl()` 表示矩形 A 的左上角顶点,`rectA.br()` 表示矩形 A 的右下角顶点,`rectA.width` 和 `rectA.height` 表示矩形 A 的宽度和高度。`+` 运算符用于将两个 `Point` 类型相加。
相关问题
c++ opencv 判断矩形是否与多边形有交集
要判断一个矩形和一个多边形是否有交集,可以使用 OpenCV 中提供的函数 `cv::intersectConvexConvex`。
首先,将矩形转换为一个四边形,并将多边形转换为一个凸多边形。然后,使用 `cv::intersectConvexConvex` 函数判断这两个凸多边形是否有交集。如果有交集,说明矩形和多边形有交集。
以下是示例代码:
```c++
#include <opencv2/opencv.hpp>
using namespace cv;
bool isRectIntersectPoly(const Rect& rect, const std::vector<Point>& poly) {
// 将矩形转换为一个四边形
std::vector<Point> rect_poly(4);
rect_poly[0] = rect.tl();
rect_poly[1] = Point(rect.x + rect.width, rect.y);
rect_poly[2] = rect.br();
rect_poly[3] = Point(rect.x, rect.y + rect.height);
// 将多边形转换为一个凸多边形
std::vector<Point> convex_poly;
convexHull(poly, convex_poly);
// 判断凸多边形和四边形是否有交集
std::vector<Point2f> intersect_points;
bool intersect = intersectConvexConvex(convex_poly, rect_poly, intersect_points);
return intersect;
}
```
其中,`Rect` 表示矩形,`std::vector<Point>` 表示多边形。函数返回值为 `bool` 类型,表示矩形和多边形是否有交集。
c++ opencv 画矩形
你可以使用 OpenCV 中的 `rectangle()` 函数绘制矩形。这个函数有以下参数:
- `img`:要绘制矩形的图像。
- `pt1`:矩形的左上角点。
- `pt2`:矩形的右下角点。
- `color`:矩形的颜色。
- `thickness`:矩形边框的粗细,默认值为1。
- `lineType`:线条的类型,默认值为8。
以下是一个简单的示例代码:
```c++
#include <opencv2/opencv.hpp>
using namespace cv;
int main()
{
Mat img = imread("test.jpg");
Point pt1(100, 100);
Point pt2(200, 200);
Scalar color(0, 0, 255);
int thickness = 2;
int lineType = LINE_8;
rectangle(img, pt1, pt2, color, thickness, lineType);
imshow("Image", img);
waitKey(0);
return 0;
}
```
这个代码会读取名为 "test.jpg" 的图像,绘制一个左上角为 (100,100),右下角为 (200,200) 的红色矩形,并显示结果图像。
阅读全文