国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

二值圖像的歐拉數(shù)計(jì)算公式

OpenCV學(xué)堂 ? 來源:OpenCV學(xué)堂 ? 作者:OpenCV學(xué)堂 ? 2022-06-30 11:08 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

歐拉數(shù)定義

二值圖像分析中歐拉數(shù)重要的拓?fù)涮卣髦唬趫D像分析與幾何對象識(shí)別中有著十分重要的作用,二值圖像的歐拉數(shù)計(jì)算公式表示如下:
E = N – H 其中
E表示計(jì)算得到歐拉數(shù)
N表示聯(lián)通組件的數(shù)目
H表示在聯(lián)通組件內(nèi)部的洞的數(shù)目
下圖是二值圖像,白色背景,兩個(gè)對象、分析計(jì)算得到歐拉數(shù)的例子:

01d926cc-f7bf-11ec-ba43-dac502259ad0.png

可以看到通過簡單的歐拉數(shù)屬性就可以對它們進(jìn)行區(qū)分。左側(cè)對象中有兩個(gè)聯(lián)通區(qū)域,所以N=2,沒有洞孔區(qū)域,所以H=0, 計(jì)算得到歐拉數(shù)目為 2 – 0 = 。右側(cè)是大寫字母B,它只有一個(gè)聯(lián)通區(qū)域所以N = 1, 內(nèi)部有兩個(gè)洞孔區(qū)域所以H = 2,最終計(jì)算得到歐拉數(shù)為 2 – 1 = -1。對于任意一個(gè)幾何形狀來說,如果我們要求得它的歐拉數(shù),就首先要分析它的輪廓結(jié)構(gòu),然后根據(jù)輪廓層次結(jié)構(gòu)計(jì)算得到N與H值。

歐拉數(shù)是圖像幾何識(shí)別中重要的屬性,舉例如下圖中三個(gè)英文字母

01f57b74-f7bf-11ec-ba43-dac502259ad0.png?對字母A來說它的內(nèi)部有一個(gè)黑色孔洞,所以它的H=1,其本身是一個(gè)聯(lián)通組件所以N =1,最終計(jì)算得到歐拉數(shù)為 E = 1 -1 = 0,同樣可以計(jì)算B與C它們的歐拉數(shù)分布為-1與1,可見通過歐拉數(shù)屬性可以輕而易舉的區(qū)分ABC三個(gè)英文字母。

二:輪廓層次信息獲取

在OpenCV對二值圖像進(jìn)行輪廓分析輸出的層次結(jié)構(gòu)會(huì)保存在一個(gè)Vec4i的結(jié)構(gòu)體中,這里有必要首先看一下輪廓發(fā)現(xiàn)API及其相關(guān)參數(shù)的解釋:

voidcv::findContours(
InputOutputArrayimage,
OutputArrayOfArrayscontours,
OutputArrayhierarchy,
intmode,
intmethod,
Pointoffset=Point()
)
image參數(shù)表示輸入的二值圖像
contours表示所有的輪廓信息,每個(gè)輪廓是一系列的點(diǎn)集合
hierarchy表示對應(yīng)的每個(gè)輪廓的層次信息,我們就是要用它實(shí)現(xiàn)對最大輪廓?dú)W拉數(shù)的分析
mode表示尋找輪廓拓?fù)涞姆椒ǎ绻獙ふ彝暾膶哟涡畔ⅲx擇參數(shù)RETR_TREE
method表示輪廓的編碼方式,一般選擇簡單鏈?zhǔn)骄幋a,參數(shù)CHAIN_APPROX_SIMPLE
offset表示是否有位移,一般默認(rèn)是0

上面的參數(shù)中最重要的是hierarchy信息,它的輸出是vector每個(gè)輪廓對應(yīng)的Vec4i結(jié)構(gòu)體里面四個(gè)值解釋如下:

02138222-f7bf-11ec-ba43-dac502259ad0.png

上面的索引如果是負(fù)數(shù)就表示沒有相關(guān)層次信息,如果是非負(fù)數(shù)就表示有相關(guān)的層次關(guān)系信息。此外輪廓發(fā)現(xiàn)函數(shù)對輸入image圖像的要求必須滿足

  • 背景是黑色 ,0表示

  • 對象或者前景是白色,1表示

三:歐拉數(shù)計(jì)算方法

有了輪廓的層次信息與每個(gè)輪廓的信息之后,嘗試遍歷每個(gè)輪廓,首先通過調(diào)用findContours就可以獲取二值圖像的輪廓層次信息,然后遍歷每個(gè)輪廓,進(jìn)行層次遍歷,獲得每層子輪廓的總數(shù),最終根據(jù)輪廓層級不同分為孔洞與連接輪廓的計(jì)數(shù),二者想減得到每個(gè)獨(dú)立外層輪廓的歐拉數(shù)。

二值化與輪廓發(fā)現(xiàn)的代碼如下:

Matgray,binary;
cvtColor(src,gray,COLOR_BGR2GRAY);
threshold(gray,binary,0,255,THRESH_BINARY|THRESH_OTSU);
vectorhireachy;
vector<vector>contours;
findContours(binary,contours,hireachy,RETR_TREE,CHAIN_APPROX_SIMPLE,Point());

獲取同層輪廓的代碼如下:

vector<int>current_layer_holes(vector<Vec4i>layers,intindex){
intnext=layers[index][0];
vector<int>indexes;
indexes.push_back(index);
while(next>=0){
indexes.push_back(next);
next=layers[next][0];
}
returnindexes;
}

使用隊(duì)列迭代尋找遍歷每層的代碼如下:

while(!nodes.empty()){
//當(dāng)前層總數(shù)目
if(index%2==0){//聯(lián)通組件對象
n_total+=nodes.size();
}
else{//孔洞對象
h_total+=nodes.size();
}
index++;
//計(jì)算下一層所有孩子節(jié)點(diǎn)
intcurr_ndoes=nodes.size();
for(intn=0;nintvalue=nodes.front();
nodes.pop();
//獲取下一層節(jié)點(diǎn)第一個(gè)孩子
intchild=hireachy[value][2];
if(child>=0){
nodes.push(child);
}
}
}

四:運(yùn)行與測試結(jié)果

測試圖一(ABC)與運(yùn)行結(jié)果:

022be9de-f7bf-11ec-ba43-dac502259ad0.jpg

測試圖二與運(yùn)行結(jié)果

024b4b1c-f7bf-11ec-ba43-dac502259ad0.jpg

五:完整源代碼

#include
#include

usingnamespacecv;
usingnamespacestd;

vector<int>current_layer_holes(vectorlayers,intindex);

intmain(intargc,char**argv){
Matsrc=imread("D:/holes.png");
if(src.empty()){
printf("couldnotloadimage...
");
return-1;
}
namedWindow("input",CV_WINDOW_AUTOSIZE);
imshow("input",src);

Matgray,binary;
cvtColor(src,gray,COLOR_BGR2GRAY);
threshold(gray,binary,0,255,THRESH_BINARY|THRESH_OTSU);

vectorhireachy;
vector<vector>contours;
findContours(binary,contours,hireachy,RETR_TREE,CHAIN_APPROX_SIMPLE,Point());
Matresult=Mat::zeros(src.size(),src.type());
for(size_tt=0;tintnext=hireachy[t][0];//nextatthesamehierarchicallevel
intprev=hireachy[t][1];//prevatthesamehierarchicallevel
intchild=hireachy[t][2];//firstchild
intparent=hireachy[t][3];//parent
printf("next%d,previous%d,children:%d,parent:%d
",next,prev,child,parent);
drawContours(result,contours,t,Scalar(0,255,0),2,8);
//startcalculateeulernumber
inth_total=0;
intn_total=1;
intindex=1;
vector<int>all_children;
if(child>=0&&parent0){
//計(jì)算當(dāng)前層
queue<int>nodes;
vector<int>indexes=current_layer_holes(hireachy,child);
for(inti=0;iwhile(!nodes.empty()){
//當(dāng)前層總數(shù)目
if(index%2==0){//聯(lián)通組件對象
n_total+=nodes.size();
}
else{//孔洞對象
h_total+=nodes.size();
}
index++;
//計(jì)算下一層所有孩子節(jié)點(diǎn)
intcurr_ndoes=nodes.size();
for(intn=0;nintvalue=nodes.front();
nodes.pop();
//獲取下一層節(jié)點(diǎn)第一個(gè)孩子
intchild=hireachy[value][2];
if(child>=0){
nodes.push(child);
}
}
}
printf("holenumber:%d
",h_total);
printf("connectionnumber:%d
",n_total);
//計(jì)算歐拉數(shù)
inteuler_num=n_total-h_total;
printf("numberofeuler:%d
",euler_num);
drawContours(result,contours,t,Scalar(0,0,255),2,8);
//顯示歐拉數(shù)
Rectrect=boundingRect(contours[t]);
putText(result,format("euler:%d",euler_num),rect.tl(),FONT_HERSHEY_SIMPLEX,1.0,Scalar(255,255,0),2,8);
}
if(child0&&parent0){
printf("holenumber:%d
",h_total);
printf("connectionnumber:%d
",n_total);
inteuler_num=n_total-h_total;
printf("numberofeuler:%d
",euler_num);
drawContours(result,contours,t,Scalar(255,0,0),2,8);
Rectrect=boundingRect(contours[t]);
putText(result,format("euler:%d",euler_num),rect.tl(),FONT_HERSHEY_SIMPLEX,1.0,Scalar(255,255,0),2,8);
}

}

imshow("result",result);
waitKey(0);
return0;
}

vector<int>current_layer_holes(vectorlayers,intindex){
intnext=layers[index][0];
vector<int>indexes;
indexes.push_back(index);
while(next>=0){
indexes.push_back(next);
next=layers[next][0];
}
returnindexes;
}

PS:代碼未經(jīng)更多嚴(yán)格測試,僅供參考!

審核編輯 :李倩


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 二值圖像
    +關(guān)注

    關(guān)注

    0

    文章

    14

    瀏覽量

    8920
  • OpenCV
    +關(guān)注

    關(guān)注

    33

    文章

    652

    瀏覽量

    44799
  • 歐拉
    +關(guān)注

    關(guān)注

    1

    文章

    16

    瀏覽量

    1928

原文標(biāo)題:OpenCV輪廓層次分析實(shí)現(xiàn)歐拉數(shù)計(jì)算

文章出處:【微信號(hào):CVSCHOOL,微信公眾號(hào):OpenCV學(xué)堂】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    labview之自定義計(jì)算公式

    最近給網(wǎng)友解決問題的時(shí)候,對方提出來,想要一個(gè)可以填寫計(jì)算公式,然后數(shù)據(jù)進(jìn)來后自動(dòng)進(jìn)行計(jì)算,從而得出轉(zhuǎn)換完的數(shù)據(jù),由此和大家進(jìn)行一個(gè)分享。 廢話不多說我們直接上例程Demo,示例如下: Demo 詳情請參考公眾號(hào):上位機(jī)知識(shí)分享LABVIEW
    的頭像 發(fā)表于 03-01 10:11 ?523次閱讀
    labview之自定義<b class='flag-5'>計(jì)算公式</b>

    開源助力制造企業(yè)在OT領(lǐng)域數(shù)智化轉(zhuǎn)型

    多重挑戰(zhàn),新一代操作系統(tǒng)成為破局關(guān)鍵。OpenAtom openEuler(簡稱“openEuler”或“開源”),正以其開源開放、高可用、高安全的特性,成為OT深度IT化進(jìn)程中的堅(jiān)實(shí)底座。
    的頭像 發(fā)表于 12-29 13:49 ?458次閱讀
    開源<b class='flag-5'>歐</b><b class='flag-5'>拉</b>助力制造企業(yè)在OT領(lǐng)域<b class='flag-5'>數(shù)</b>智化轉(zhuǎn)型

    CW32F0看門狗定時(shí)時(shí)長計(jì)算公式及舉例

    看門狗定時(shí)時(shí)長計(jì)算公式: T = ( 4×2PRS / f )×( ARR + 1 ) 其中,f 為時(shí)鐘源 RC10K 的頻率,PRS 為預(yù)分頻系數(shù),ARR 為重載。 故,當(dāng)時(shí)鐘源 RC10K
    發(fā)表于 12-15 07:46

    串行時(shí)鐘發(fā)生器的計(jì)算公式

    串行時(shí)鐘發(fā)生器用來產(chǎn)生 I2C 通信的波特率時(shí)鐘 SCL。串行時(shí)鐘發(fā)生器采用 PCLK 作為輸入時(shí)鐘,通過 1 個(gè) 8bit的計(jì)數(shù)器計(jì)數(shù),輸出所需波特率的 I2C 時(shí)鐘信號(hào)。 SCL 時(shí)鐘頻率計(jì)算公式
    發(fā)表于 12-08 08:16

    使用Otsu閾值算法將灰度圖像

    Otsu 算法是由日本學(xué)者OTSU于1979年提出的一種對圖像進(jìn)行化的高效算法,又稱“最大類間方差法”。當(dāng)我們對一個(gè)圖象進(jìn)行化操作的
    發(fā)表于 10-28 06:49

    貼片電容的精度是怎么計(jì)算出來的?

    貼片電容的精度通過 實(shí)際電容與標(biāo)稱電容的偏差范圍 計(jì)算得出,其核心計(jì)算邏輯和關(guān)鍵要點(diǎn)如下: 一、精度定義與計(jì)算公式 貼片電容的精度表示實(shí)
    的頭像 發(fā)表于 10-11 15:01 ?1367次閱讀
    貼片電容的精度是怎么<b class='flag-5'>計(jì)算</b>出來的?

    測斜儀數(shù)據(jù)計(jì)算方法解析:從公式理解到智能應(yīng)用

    測斜儀作為工程安全監(jiān)測的重要設(shè)備,其測量數(shù)據(jù)的準(zhǔn)確計(jì)算直接關(guān)系到結(jié)構(gòu)物安全狀態(tài)的判斷。南京峟思將系統(tǒng)為大家介紹測斜儀數(shù)據(jù)的計(jì)算原理與方法,幫助用戶更好地理解監(jiān)測數(shù)據(jù)的產(chǎn)生過程。測斜儀計(jì)算公式詳解當(dāng)被
    的頭像 發(fā)表于 09-28 13:30 ?627次閱讀
    測斜儀數(shù)據(jù)<b class='flag-5'>計(jì)算</b>方法解析:從<b class='flag-5'>公式</b>理解到智能應(yīng)用

    開源社區(qū)AI聯(lián)合工作組正式成立

    近日,2025開放原子開源生態(tài)大會(huì)——開源生態(tài)分論壇在北京國家會(huì)議中心期順利舉辦。來自產(chǎn)、學(xué)、研、用領(lǐng)域的社區(qū)成員與開發(fā)者齊聚一堂,共探南北向生態(tài)拓展與國際協(xié)作,深入解析AI生態(tài)使能與落地、邊
    的頭像 發(fā)表于 07-28 17:20 ?1266次閱讀

    電力變壓器空載及短路功率因數(shù)計(jì)算公式及應(yīng)用

    的定義得出: PF=P/S。 P為有功功率,S為視在功率。 上述功率因數(shù)計(jì)算公式只有在已知有功功率和視在功率(或電壓和電流的有效)的情況下才能使用。 對于一般的電力設(shè)備而言,不同的工作點(diǎn)下有不同的功率因數(shù)。因此,許多設(shè)備會(huì)在銘牌上標(biāo)識(shí)額定運(yùn)行狀態(tài)下
    的頭像 發(fā)表于 07-15 10:00 ?3546次閱讀
    電力變壓器空載及短路功率因數(shù)<b class='flag-5'>計(jì)算公式</b>及應(yīng)用

    如何計(jì)算孔板流量計(jì)和平衡流量計(jì)的流量?計(jì)算公式一樣嗎?

    平衡流量計(jì)與孔板流量計(jì)作為差壓式流量計(jì)的典型代表,雖均基于壓力差與流量的數(shù)學(xué)關(guān)系進(jìn)行計(jì)算,但是平衡流量計(jì)計(jì)算公式和孔板流量計(jì)的計(jì)算公式大不相同,其核心公式、參數(shù)修正及適用場景存在顯著差
    的頭像 發(fā)表于 07-09 13:54 ?882次閱讀
    如何<b class='flag-5'>計(jì)算</b>孔板流量計(jì)和平衡流量計(jì)的流量?<b class='flag-5'>計(jì)算公式</b>一樣嗎?

    自己動(dòng)手繞線圈電感詳細(xì)計(jì)算公式(建議收藏!)

    *2.047)+(40*3.74)}]÷2.047=19圈空心電感計(jì)算公式:L(mH)=(0.08D.D.N.N)/(3D+9W+10H)D------線圈直徑N------線圈匝數(shù)d-----線徑H----
    發(fā)表于 05-28 16:57

    電機(jī)選型計(jì)算公式與知識(shí)點(diǎn)匯總

    純分享帖,需要者可點(diǎn)擊附件獲取完整資料~~~*附件:電機(jī)選型計(jì)算公式與知識(shí)點(diǎn)匯總.pdf 【免責(zé)聲明】內(nèi)容轉(zhuǎn)自今日電機(jī),因轉(zhuǎn)載眾多,無法確認(rèn)真正原始作者,故僅標(biāo)明轉(zhuǎn)載來源。版權(quán)歸原出處所有,純分享帖,侵權(quán)請聯(lián)系刪除內(nèi)容以保證您的權(quán)益。
    發(fā)表于 04-29 16:10

    壓敏電阻器選型計(jì)算公式解析

    在電子電路設(shè)計(jì)中,壓敏電阻器作為一種重要的過電壓保護(hù)元件,其選型至關(guān)重要。合理的選型不僅能有效保護(hù)電路免受浪涌電壓的損害,還能確保電路的穩(wěn)定運(yùn)行。以下介紹壓敏電阻器選型的關(guān)鍵計(jì)算公式。 壓敏電壓計(jì)算
    的頭像 發(fā)表于 04-21 16:48 ?1560次閱讀
    壓敏電阻器選型<b class='flag-5'>計(jì)算公式</b>解析

    如何選擇合適的水位流量計(jì)算公式?

    的適用場景、參數(shù)測量方法及公式選擇要點(diǎn),幫助用戶精準(zhǔn)匹配計(jì)算公式。一、第一步:明確堰型結(jié)構(gòu)選擇公式前,需通過現(xiàn)場檢查或設(shè)計(jì)圖紙確認(rèn)堰的幾何形狀:注意:若堰口形狀與上
    的頭像 發(fā)表于 04-02 16:32 ?1574次閱讀
    如何選擇合適的水位流量<b class='flag-5'>計(jì)算公式</b>?

    壓敏電阻型號(hào)及電感計(jì)算公式

    )) + ( 40 * 圈長(吋))}] ÷ 圈直徑 (吋) 圈數(shù) = [8.116 * {(18*2.047) + (40*3.74)}] ÷ 2.047 = 19 圈 空心電感計(jì)算公式空心
    發(fā)表于 04-01 14:09