Opencv识别圆,矩形,三角形的步骤(优化)

       按照之前的步骤虽然可以识别出来,但是识别效果受角度,光照的因素很大!故在原来的基础上做了些优化,最主要的是用到腐蚀膨胀函数,优化效果如下:

步骤如下:

0.通过摄像头或是加载图片的方式获取到源图;
1.调用erode , dilate函数进行腐蚀膨胀,去掉图片上面黑色字体的影响(注意内核元素的定义)!
2.调节HSV的值,通过morphologyEx函数连接一些连通域;
3.通过第2步的操作得到只保留与目标形状相近部分的图片;
4.通过cvFindContours函数检测所有轮廓;
5.通过GetAreaMaxContour函数找到最大的轮廓(加上轮廓面积条件做判断,优化识别效果);
6.如果是圆,通过cvDrawContours函数画出轮廓;如果是矩形或是三角形,通过cvApproxPoly函数进行多边形逼近;

7.如果是圆的话,用handlecicle函数进行识别,参数根据实际图片进行调节。矩形与三角形的判断方法可参考网上的,网上有!

       注意事项:

       1.在腐蚀膨胀的时候,跟定义的内核元素有很大关系。一开始的时候腐蚀膨胀偶尔会不起作用,刚刚开始认为我的封装(C#调用C++封装的DLL进行识别)出了问题,!后面经过各种测试发现不是,原因就是出在了内核元素的定义上,这是到目前为止的结论!

你可能感兴趣的:(Opencv)