IOU для двух эллипсов перекрываются в OpenCV C ++ - PullRequest
0 голосов
/ 17 марта 2020

Я искал некоторые встроенные или реализованные в C ++ функции для вычисления перекрытия двух эллипсов в соответствии с IOU (Intersection Over Union) или коэффициентом Jaccard, и я нашел его реализованным, по-видимому, в новой версии OpenCV под этим file

static inline float rotatedRectIOU(const RotatedRect& a, const RotatedRect& b)
{
    std::vector<Point2f> inter;
    int res = rotatedRectangleIntersection(a, b, inter);
    if (inter.empty() || res == INTERSECT_NONE)
        return 0.0f;
    if (res == INTERSECT_FULL)
        return 1.0f;
    float interArea = contourArea(inter);
    return interArea / (a.size.area() + b.size.area() - interArea);
}

И поскольку я использую более старую версию OpenCV, я попытался только скопировать код, поскольку он, кажется, не зависит от каких-либо других ресурсов. Код работает очень гладко. Однако результат поразительно неправильный, я не уверен, почему.

enter image description here

...