1

我是 C++ 新手,并尝试弄清楚这行代码的含义:

cur_rect = cv::Rect(cur_rect) & cv::Rect(0, 0, mat->cols, mat->rows); // here
if( cv::Rect(cur_rect) == cv::Rect() )  //here
{
.......
}
4

2 回答 2

8

Rect & Rect部分与两个矩形相交,并在两个输入重叠时返回一个非空矩形。

因此,您可以比较结果以Rect()查看是否存在交叉点。您的代码裁剪cur_rect(0, 0, mat->cols, mat->rows)然后检查它是否为空。

资料来源:

http://opencv.willowgarage.com/documentation/cpp/core_basic_structures.html?highlight=rect

如何在 OpenCv 中轻松检测 2 个 ROI 是否相交?

编辑

另一种实现,更简洁:

// crop cur_rect to rectangle with matrix 'mat' size:
cur_rect &= cv::Rect(0, 0, mat->cols, mat->rows);
if (cur_rect.area() == 0) {
    // result is empty
    ...
}
于 2012-05-10T09:52:54.117 回答
1

我假设cv::Rect(...)方法(或它们的家族)返回一个矩形对象。你不明白的那行,我假设是一个==比较矩形的重载运算符 ()。

但是我在这里做了很多假设,因为我没有cv类的代码。

至于&重载运算符 - 假设这是在做一个交集或联合。再一次没有代码很难说。

于 2012-05-10T09:49:05.133 回答