接上一章,做完图片细化得到细线之后就是直线拟合了。
思路很简单,先找轮廓,然后用直线拟合。
但是我们要的是平行直线啊,那要把那个很不合群的直线给T掉,这里的思路用的是
- 遍历所有直线
- 用一个map<float,int>来存储直线,float为斜率slope,int为与这个slope平行的直线总数
- 因为斜率存在一定误差,所以不能算严格平行,只要两直线斜率差在一定范围内就算平行了
- 因为我这里直线大都是水平的,所以用dx/dy就不合适了,因为dy大部分情况下都很小,所以我用dy/dx来替代斜率
- 最后在map中找int最大的那个就是我们要保留的,其他的直线都删掉去啦
首先是用cvFindContour来找轮廓,注意放入这个函数的图像必须是灰度图像,一般使用它之前会进行二值化以得