这部分主要是LT做的。这里对他的代码进行下分析,活学活用。
工程是FlowChart,主要是FlowChart.cpp的recognize函数,处理过程如下:
【1. 读取图像,将其转为二值图。】
使用了openCV里的东西,所以比较方便。它全称是Open Source Computer Vision Library。计算机视觉市场巨大而且持续增长,且这方面没有标准API,所以OpenCV应运而生。如有直接读取图片的函数IplImage *pSrc = cvLoadImage(imgName,0);,还有直接二值转化的函数cvCvtColor(pSrc,pDump,CV_GRAY2BGR);。
【2.识别椭圆形。】
识别图形方面,OpenCV也有专门的函数cvFindContours,用来找到图像中的轮廓,然后对这些轮廓进行判断,检测他们是否满足椭圆的几何特性。在这些轮廓中进行选择3个点来进行椭圆拟合,进行多次迭代,这个也有cvFitEllipse2。进行判断。
这里用到的识别,基于hough变换,参考另一篇转载的文章。
当然,强大的openCV也有相关的函数进行处理cvHoughCircles。
【3.识别矩形。】
这与上面的第二步类似。还有需要做到的,进行整合。因为在图像中的同一个矩形框,可能会被多次识别出来(因为边有厚度)。所以,要整合这些矩形框。
openCV里没有直接的检测矩形的函数,可以通过检测出直线,再处理判断平行垂直的四条线.cvLine2.
【4.