1. 程式人生 > >Opencv識別圓,矩形,三角形的步驟(優化)

Opencv識別圓,矩形,三角形的步驟(優化)

       按照之前的步驟雖然可以識別出來,但是識別效果受角度,光照的因素很大!故在原來的基礎上做了些優化,最主要的是用到腐蝕膨脹函式,優化效果如下:

步驟如下:

0.通過攝像頭或是載入圖片的方式獲取到源圖;
1.呼叫erode , dilate函式進行腐蝕膨脹,去掉圖片上面黑色字型的影響(注意核心元素的定義)!
2.調節HSV的值,通過morphologyEx函式連線一些連通域;
3.通過第2步的操作得到只保留與目標形狀相近部分的圖片;
4.通過cvFindContours函式檢測所有輪廓;
5.通過GetAreaMaxContour函式找到最大的輪廓(加上輪廓面積條件做判斷,優化識別效果);
6.如果是圓,通過cvDrawContours函式畫出輪廓;如果是矩形或是三角形,通過cvApproxPoly函式進行多邊形逼近;

7.如果是圓的話,用handlecicle函式進行識別,引數根據實際圖片進行調節。矩形與三角形的判斷方法可參考網上的,網上有!

       注意事項:

       1.在腐蝕膨脹的時候,跟定義的核心元素有很大關係。一開始的時候腐蝕膨脹偶爾會不起作用,剛剛開始認為我的封裝(C#呼叫C++封裝的DLL進行識別)出了問題,!後面經過各種測試發現不是,原因就是出在了核心元素的定義上,這是到目前為止的結論!