前言
又是好久沒寫。。。開了OpenCV這個板塊總要寫點東西,正好昨晚花了一晚上整出來一個幾何形狀識別,用了個簡單的方法,整體上不難
理論
對於物體幾何形狀的識別,我們需要的就是它的特征,而常見的幾何形狀特征主要在於構成這一形狀的邊的條數,那么對於幾何形狀的識別,就可以分為以下兩步:首先濾除無關信息,接着獲取判別特征。
濾除無關信息我們采用的是簡單的二值化處理,對於初始圖像,利用到如下兩個函數:
灰度:cvtColor(img, imgGray, COLOR_BGR2GRAY)
二值化:threshold(imgGray, imgBinary, 197, 255, THRESH_BINARY)
197為灰度二值化閾值,對於較為復雜的情況可以采用Sobel或者Canny
獲取判別特征,首先利用findContours找出邊界,利用drawContours畫出邊界所在,再利用多邊形逼近approxPolyDP擬合出形狀最可能的邊數
vector<vector<Point>> contours;
vector<Point> point;
vector<Vec4i> hireachy;
findContours(imgBinary, contours, hireachy, RETR_TREE, CHAIN_APPROX_SIMPLE, Point());//尋找邊界