前言
Opencv4图像分割和识别实战6的视频课程()主要是讲解如何求两条曲线之间的距离。对应的,本课作业来求下面图所示的两条直线间距离以巩固课堂上所学的知识。
解决方法一
1)通过前面所学的投影分割法来分别获得这2条直线上的离散采样点,然后将它们通过直线拟合求得各自的直线方程,如k1x+b和k2x+b2。
2)在其中一条直线上任取一点(x1,y1),然后向另外一条直线做垂线,该垂线方程很好求,其斜率为-(1/k1)
3)求出垂线方程后,即可求垂线和第二条直线的交点(x2,y2)
4)根据欧式距离公式,即可求得当前点到另外一条直线的距离dist=sqrt((x1-x2)^2+(y1-y2)^2)
解决方法二
第一个方法虽然直观,但是比较繁琐。 我们这里借助于课程里面计算两条曲线间距离的方法来求解。
这里面重点要理解两个概念
1)连通域分析,即连在一起的前景被当作一个独立的目标,并给与对应的label号。它也是传统图像处理中常用的图像分割和识别的手段。
2)distanceTransform()的使用。该api是用来计算前景像素(白色)到最近的背景像素(黑色)的距离。利用它就可以求点到直线的垂直距离了。
当然,这两个概念以及背后的算法原理会在课堂上结合实例进行详细解释。
回到本次课后作业,我们可以先进行连通域分析来区分开这两条直线,并分别打上1和2的label号,如下局部放大图所示,上下分别是两条直线的label。
然后想办法,把第一条线变黑,图像其余部分都是白色,调用distanceTransform()来自动计算所有白色像素到第一条(黑色)直线的垂直距离,并且这些白色像素的像素值由255变成各自的垂直距离值了。 其中一部分值如下图所示。
上面的操作在类似做一次,就可以求得第一条直线上各点到第二条直线得距离。
具体代码和求两条曲线距离得几乎完全一样,这里就不贴了,课件里面会上传。