IoU计算

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/tfcy694/article/details/88263186

输入:

vector<float> p1;  //y1min, x1min, y1max, x1max;
vector<float> p2;  //y2min, x2min, y2max, x2max;

输出:

float IoU

代码:

float computeIoU(vector<float> p1, vector<float> p2)
{
	//如果存在一个轴上,某个框的最小坐标大于另外一个框的最大坐标,则两框无重合。
	if(p2[3]-p1[1]<0)||(p1[3]-p2[1]<0)||(p1[2]-p2[0]<0)||(p2[2]-p1[0]<0)
		return 0;
	//两框必有重合,计算重合面积
	float h,w;
	if(p1[0]<p2[0]){
		if(p1[2]>p2[2]) h=p2[2]-p2[0];
		else h=p1[2]-p2[0];
		}
	else{
		if(p1[2]>p2[2]) h=p2[2]-p1[0];
		else h=p1[2]-p1[0];
		}
	if(p1[1]<p2[1]){
		if(p1[3]>p2[3]) w=p2[3]-p2[1];
		else w=p1[3]-p2[1];
		}
	else{
		if(p1[3]>p2[3]) w=p2[3]-p1[1];
		else w=p1[3]-p1[1];
		}
	// 容斥原理计算IoU
	return (h*w)/(p1[2]-p1[0])*(p1[3]-p1[1])+(p2[2]-p2[0])*(p2[3]-p2[1])-h*w)

猜你喜欢

转载自blog.csdn.net/tfcy694/article/details/88263186
IOU