這是一張經過處理後的紅燈的影象,我們需要找到其中的紅燈,可以看到是兩個圓,用霍夫圓之後發現其中調參非常麻煩,於是寫了乙個根據輪廓來分析圓的演算法。
演算法思想:findcontours()找到影象的輪廓,使用minenclosingcircle()找到輪廓的最小包圍矩形,計算輪廓上的每個點到圓心的距離和半徑的差值,進行累加(簡單來說就是求輪廓中每個點到圓心距離和半徑的方差),當累加和小於某個值時,我們認為它是乙個圓。
核心函式:
//對輪廓進行分析
float calculatecircularity(vectorcontours)
fcompare = fsum / (float)contours.size();
return fcompare;
}
首先找到輪廓,並且對繪製出輪廓,藍色為輪廓,其中包含了我們需要的紅燈和不需要的數字
我們對提取的每個輪廓進行圓的特性分析,並且輸出得到的差值累加和
可以看到有兩個累加和比較小的,不確定是否是兩個紅燈,暫時設定閾值為0.6,將輪廓分析後累加和小於閾值的用綠色進行繪製
成功找到兩個紅燈
下面貼上整個工程**
#include#includeusing namespace std;
using namespace cv;
//對輪廓進行分析
opencv學習筆記(二)尋找輪廓
opencv中使用findcontours函式來查詢輪廓,這個函式的原型為 1 void findcontours inputoutputarray image,outputarrayofarrays contours,outputarray hierar 2 chy,int mode,int me...
opencv尋找輪廓 繪製輪廓 輪廓層級原理
void findcontours inputoutputarray image,outputarrayofarrays contours,outputarray hierarchy,int mode,int method,point offset point 引數image inputarray型...
opencv的實用研究 分析輪廓並尋找邊界點
opencv的實用研究 分析輪廓並尋找邊界點 輪廓是影象處理中非常常見的。對現實中的影象進行取樣 色彩變化 灰度變化之後,能夠處理得到的是 輪廓 它直接地反應你了需要分析物件的邊界特徵。而對輪廓的分析,實際上也就是對原影象特徵的分析。在opencv中,已經實現了基礎的輪廓演算法,但是相比較於比如ha...