計算兩個矩形IOU的演算法
阿新 • • 發佈:2019-02-01
float intersectRect(const cv::Rect& rectA, const cv::Rect& rectB, cv::Rect& intersectRect){ if (rectA.x > rectB.x + rectB.width) { return 0.; } if (rectA.y > rectB.y + rectB.height) { return 0.; } if ((rectA.x + rectA.width) < rectB.x) { return 0.; } if ((rectA.y + rectA.height) < rectB.y) { return 0.; } float colInt = min(rectA.x + rectA.width, rectB.x + rectB.width) - max(rectA.x, rectB.x); float rowInt = min(rectA.y + rectA.height, rectB.y + rectB.height) - max(rectA.y, rectB.y); float intersection = colInt * rowInt; float areaA = rectA.width * rectA.height; float areaB = rectB.width * rectB.height; float intersectionPercent = intersection / (areaA + areaB - intersection); intersectRect.x = max(rectA.x, rectB.x); intersectRect.y = max(rectA.y, rectB.y); intersectRect.width = min(rectA.x + rectA.width, rectB.x + rectB.width) - intersectRect.x; intersectRect.height = min(rectA.y + rectA.height, rectB.y + rectB.height) - intersectRect.y; return intersectionPercent; }