OpenCV4 利用点线距离判断最小外接矩形的距离

作者:RayChiu_Labloy
版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处


目录

一个前提:

过程:


这次只讲思路,集成的话非常简单

一个前提:

        两个外接矩形是平行的

过程:

第一步找到两个目标的最小矩形,以其中一个矩形的左边界为基准线(也就是取到最小外接矩形的左上角点1和左下角点2的连接线作为基准线),另外一个目标的左边缘线上随便取一点,我们这里取左上角点3

         获取最小外接矩形是先通过 findContours()找到轮廓,定位到具体目标轮廓后:

Point2f base_vtx[4];
RotatedRect base_box = cv::minAreaRect(base_contours[0]);
base_box.points(base_vtx); // 蓝色最小外接矩形的四个角
circle(img, base_vtx[0], 2, Scalar(0, 0, 255), 2); //用小圆标记点1
circle(img, base_vtx[3], 2, Scalar(0, 0, 255), 2); //用小圆标记点2

Point2f vtx[4];
RotatedRect box = cv::minAreaRect(contours[0]);
box.points(vtx); // 红色最小外接矩形的四个角
circle(img, vtx[0], 2, Scalar(0, 0, 255), 2); //用小圆标记点3

第二步 利用创建点线距离自定义函数计算距离

//定义点线距离的函数
double getDistance(Point2f point1, Point2f point2, Point2f point3)
{
	//建立直线方程Ax+By+C=0-->(y2-y1)*x+(x1-x2)*y+(x2*y1-x1*y2)=0
	double A = point2.y - point1.y;
	double B = point1.x - point2.x;
	double C = point2.x * point1.y - point1.x * point2.y;
	double a = A * A;
	double b = B * B;

	//直线距离公式D=|A*x3+B*y3+C|/sqrt(A^2+B^2)
	double w = (A * point3.x + B * point3.y + C);
	if (w < 0) w = 0 - w;//取绝对值

	return double(w / sqrt(a + b));
}

// point1, point2, point3分别对应点1、点2、点3,也就是上边的base_vtx[0]、base_vtx[3]、vtx[0]
double distance = getDistance(point1, point2, point3);
cout << "距离为:" << distance << endl;

【如果对您有帮助,交个朋友给个一键三连吧,您的肯定是我博客高质量维护的动力!!!】 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值