關於求最大聯通域的OpenCV方法

2021-06-28 15:22:53 字數 1386 閱讀 4219

最近一直在實驗室編寫關於室內獨居老人異常行為檢測的**。感覺有點吃力,在網上找了一些**,然後看到了乙個關於求最大連通域的**,感覺不錯,現在在這裡講解一下這個方法涉及到的函式,

該函式的作用是finds contours in a binary image也就是在乙個二值影象中查詢連通域,contour(輪廓;外形;(地圖上表示相同海拔各點的)等高線描畫…的輪廓;畫…的等高[等值]線;順等高線(作業)),也就是連通域的意思。它的函式原型是: void findcontours(inputoutputarray image, outputarrayofarrays contours, int mode,

int method,   pointoffset=point())

該函式的引數是image-源,乙個8位單通道的影象。非零畫素按照1對待,0畫素仍然是0.所以這個影象按照二值得方式進行對待。我們可以使用compare(), inrange(), threshold(),adaptivethreshold(), canny(),和其他的函式來通過乙個灰階影象或者彩色影象建立乙個二值影象。當提取輪廓的時候,該函式會調整這幅影象。

countour--被檢測的輪廓數量,每乙個輪廓儲存為乙個點向量。mode  --連通域獲取模式

--cv_retr_external, 僅僅檢索這個最外輪廓,對於所有的輪廓,它設定hierarchy[i][2]= hierarchy[i][3]=-1

--cv_retr_tree獲取所有的輪廓,並且重建潛逃輪廓的完整層次。這個完整的層次在opencv contours.c demo中建立和展示。

method--輪廓逼近的方法

offset--可選的偏移量,通過這個點,每個輪廓被移位。如果這個輪廓是從roi中提取到的花,這個引數是很有用的。並且它們應該在整幅影象環境中進行分析。

總之,這個函式使用suzuki85演算法從二值化的影象中檢索輪廓。輪廓是乙個有用的工具,對於形狀分析和目標檢測和識別,在opencv的范文目錄中查閱squares.c

畫出連通域的輪廓或者被填充的輪廓。函式原型是

void cvdrawcontours(cvarr* img, cvseq* contour, cvscalar externalcolor, cvscalar holecolor, int maxlevel, intthickness=1, intlinetype=8 )

如果thickness>0這個函式畫出輪廓的概要或者如果thickness<0填充由contours界定的輪廓。

cvcontourarea( contour, cv_whole_seq )

cvrect findmaxcontour(iplimage *pimg)}

arect = cvboundingrect( contmax, 0 );

return arect; }



求二維陣列的聯通子陣列和的最大值

求二維陣列的聯通子陣列和的最大值 組員 張丹丹 蔡容玉 題目 編寫乙個程式,求出二維陣列中聯通子陣列之和最大是多少,將和輸出。針對本次程式要求,我們經過討論認為,應該先把陣列中的最大的數找出,以此為起點再向上下左右分別探尋,判斷是否將該方位的數加上已獲得更大的和。如圖 對此我們進行程式的編碼如下 每...

求最大利益的演算法

題目 外匯交易可以通過兌換不國家的貨幣以賺取匯率差,比如1美元兌換100日元時購入1000美元,然後匯率變動到1美元兌換108美元時賣出,這時的收益是 108 100 1000 8000日元 現在請將某貨幣在t時刻的 rt t 0,1,2,n 1 作為輸入資料,計算出 差rj ri 其中j i 時的...

求最大的矩形面積

第一次想的時候,想到了動態規劃,但是還有乙個複雜度更低的方法,就是採用棧的方式。第二種方法是看了厲害的人的部落格之後才理解的。它的思想就是從後往前遍歷,使用棧儲存當前遍歷到的最小值,這個值是不斷更改的,同時,沒遍歷一次,計算一次當前的面積。在做leetcode的時候發現,從後往前遍歷的題目有很多,巧...