c++ - 两个 bb 之间的重叠分数

标签 c++ overlap bounding-box

我正在尝试创建一个函数来计算两个边界框之间的交集比。我有关于两个矩形的 Rect 信息。我创建了一个交集函数,它返回两个框之间的双倍交集分数:

double Detection::overlapBB(Rect a, Rect b){

int xa1 = a.x; int xa2 = a.x + a.width;
int ya1 = a.y; int ya2 = a.y + a.height;
int xb1 = b.x; int xb2 = b.x + b.width;
int yb1 = b.y; int yb2 = b.y + b.height;

cout << "The first rectangle:("<< xa1 << "," <<ya1 <<"),(" <<xa2<<"," <<ya2 <<")" <<endl;
cout << "The second rectangle:("<< xb1 << "," <<yb1 <<"),(" <<xb2<<"," <<yb2 <<")" <<endl;


int surfaceA = a.width*a.height;
int surfaceB = b.width*b.height;

int xn1 = Max(xa1, xb1); int yn1 = Max(ya1, yb1);
int xn2 = Min(xa2, xb2); int yn2 = Min(ya2, yb2);

 cout << "The second rectangle:("<< xn1 << "," <<yn1 <<"),(" <<xn2<<"," <<yn2 <<")" <<endl;

//int SI = (xn2 - xn1)*(yn2-yn1);
int SI = Max(0, Max(xa2, xb2) - Min(xa1, xb1)) * Max(0, Max(ya2, yb2) - Min(ya1, yb1));
int SU = surfaceA +surfaceB - SI;

cout << SI << " " <<SU << " " <<surfaceA<< " " <<surfaceB << endl;

double intersection = ((double)SI/(double)SU);


return intersection;

}

我注意到,当一个矩形在另一个矩形内时,返回的变量不正确。我可以为完全重叠和部分重叠的情况创建语句吗?

最佳答案

Fere Res 检查此范式 intersection detection .

关于c++ - 两个 bb 之间的重叠分数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21375611/

相关文章:

c++ - 文件系统 Hook

c++ - 等待线程结束 (C++)

c++ - 调用@plt函数时dlopen/static init上的共享库SIGSEGV

vba - Excel XY 图表(散点图)数据标签无重叠

three.js - 如何在 ThreeJS 中获取边界框的角点?

c++ - 如何决定我需要多少个互斥体?

css - 如何避免元素重叠?我尝试以百分比设置宽度并使用显示 :block

css - 连续重叠多个图像

c# - 将 3D 点云拆分为更小的定向边界框

tensorflow - 如何在 Tensorflow 对象检测 API 中查找边界框坐标