聯通域標記分為8聯通和4聯通
以8聯通為例,過程比一般人的簡單,只需兩步
設,signal為聯通域的個數,起初設為0.
1.尋找二值化後的目標點,設f(i,j)為目標點,若該點最左,左上,最上,上右都為0(非目標點)則signal加1,並把signal的值賦給f(i,j)。
2.如果f(i,j),最左,左上,最上,上右有非0的點,則將最小的非0點賦值給f(i,j),若f(i,j)邊上這四個點有大於最小非零點的點,則將大於最小非零點的點改為最小非零點。
3.重複以上兩個步驟,直到將所有目標點遍歷
以上上步驟能夠將聯通域標記,但不能正確的統計聯通域數量,如要統計連通域的數量,還需看下面的乙個簡單過程
統計連通域的數量
先將signal賦值給number
遍歷整個影象,統計是否有1,2,3...一直到signal。如果在遍歷整個影象統計的時候其中有幾個數字的個數為0,就將number減去幾。最後得出的number就是連通域的個數
本人提供matlab及c語言兩個版本的程式源**,連線如下:
c語言版本:
matlab版本:
連通域數量的統計
參考科學出版社的 opencv2 計算機視覺程式設計手冊 進行程式設計。相對乙個車牌區域內的字元數量進行粗略的統計,運用了將每個字元的區域化成外部輪廓的連通域然後進行數量上的統計。用到的主要是c 的mat資料,和findcontours 函式。對應c的介面是cvfindcontours。includ...
關於求最大聯通域的OpenCV方法
最近一直在實驗室編寫關於室內獨居老人異常行為檢測的 感覺有點吃力,在網上找了一些 然後看到了乙個關於求最大連通域的 感覺不錯,現在在這裡講解一下這個方法涉及到的函式,該函式的作用是finds contours in a binary image也就是在乙個二值影象中查詢連通域,contour 輪廓 ...
位元組跳動筆試題之01陣列聯通域個數
輸入乙個只包含0和1的二維陣列,上下左右和對角相鄰的1組成乙個區塊,0不形成區塊,求陣列中的區塊個數。輸入格式 第一行輸入兩個正整數n和m,n表示陣列行數,m表示陣列列數。接下來n行,每行表示陣列對應的一行,每行包含m個整數,整數之間用空格隔開。輸出格式 輸出乙個整數,表示陣列中區塊的個數。資料範圍...