0
我想檢查兩個CvRect *變量之間是否有任何部分重疊。 是否有內置的opencv函數來執行此檢查。我正在編寫opencv的c版本。檢查兩個CvRect *變量之間是否有重疊
我想檢查兩個CvRect *變量之間是否有任何部分重疊。 是否有內置的opencv函數來執行此檢查。我正在編寫opencv的c版本。檢查兩個CvRect *變量之間是否有重疊
OpenCV沒有爲此的C API。 C++的方法很簡單,就是r1 & r2
。爲&=
在OpenCV源
template<typename _Tp> static inline Rect_<_Tp>& operator &= (Rect_<_Tp>& a, const Rect_<_Tp>& b)
{
_Tp x1 = std::max(a.x, b.x), y1 = std::max(a.y, b.y);
a.width = std::min(a.x + a.width, b.x + b.width) - x1;
a.height = std::min(a.y + a.height, b.y + b.height) - y1;
a.x = x1; a.y = y1;
if(a.width <= 0 || a.height <= 0)
a = Rect();
return a;
}
因此,您只需將其翻譯爲C:
CvRect rect_intersect(CvRect a, CvRect b)
{
CvRect r;
r.x = (a.x > b.x) ? a.x : b.x;
r.y = (a.y > b.y) ? a.y : b.y;
r.width = (a.x + a.width < b.x + b.width) ?
a.x + a.width - r.x : b.x + b.width - r.x;
r.height = (a.y + a.height < b.y + b.height) ?
a.y + a.height - r.y : b.y + b.height - r.y;
if(r.width <= 0 || r.height <= 0)
r = cvRect(0, 0, 0, 0);
return r;
}
http://stackoverflow.com/questions/115426/algorithm-to-detect-intersection-of - 兩個矩形在這裏查找算法 –