精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

OpenCV4筆記之連通域分析

OpenCV學堂 ? 來源:OpenCV學堂 ? 2023-12-25 17:16 ? 次閱讀

Part11. 圖像的連通域以及連通域分析

在該系列第六篇文章中,曾經介紹過連通的概念,下面再來回顧一下。

連通:若 S 是圖像中的一個像素子集,對于任意的 。如果存在一條由 S 中像素組成的從 p 到 q 的通路,則稱 p 在像素集 S 中與 q 連通

連通域是指具有相同屬性的連通集合。例如,在一個二值圖像中,具有相同像素值的區域構成一個連通域。

所以,連通連通域是兩個不同的概念,連通域連通的子集。連通域具有以下特性:

一個連通域中的所有像素都具有相同的性質。

一個連通域中的任意兩個像素都可以通過連續的路徑連接起來。

一個連通域可以是單連通的,也可以是多連通的。

連通域分析是指在圖像中查找標記連通域的算法。這是一種常用的圖像處理技術,可以用于目標檢測、圖像分割和形狀識別等等。本文是基于二值圖像進行連通域的分析。

Part22. 連通域分析的算法

連通域分析的算法可以分為以下幾類:

基于標記的算法:該類算法首先將每個像素分配一個唯一的標記,然后使用某種策略將具有相同標記的像素連接起來。基于標記的算法包括兩遍掃描法、種子填充法和快速連通域查找法。

基于鄰域查找的算法:該類算法從圖像中的一個起始像素開始,逐個檢查其鄰域像素,如果鄰域像素具有相同像素值,則將其加入到當前連通域中。基于鄰域查找的算法包括深度優先搜索(DFS)和廣度優先搜索(BFS)。

基于分割的算法:該類算法將圖像分割成多個區域,每個區域都具有相同的像素值。基于分割的算法包括圖論方法和區域生長法。

其中,基于標記的算法是比較常用的連通域分析的算法。

12.1 兩遍掃描法

兩遍掃描算法的步驟如下

第一遍掃描

從左到右,從上到下遍歷圖像。

將每個有效像素賦予一個唯一的標記。

第二遍掃描

再次從左到右,從上到下遍歷圖像。

檢查兩個相鄰像素是否具有相同的標記。

如果兩個相鄰像素具有相同的標記,則將它們連接起來。

6852f152-a304-11ee-8b88-92fbcf53809c.giftwo-pass.gif

22.2 種子填充法

種子填充算法的步驟如下:

初始化:將圖像中的所有像素標記為未訪問。

選擇一個起始像素作為種子。

將種子像素標記為已訪問。

檢查種子像素的鄰域像素。

如果鄰域像素具有相同的像素值,則將其標記為已訪問。

如果鄰域像素具有不同的像素值,則忽略。

重復步驟 4,直到圖像中的所有像素都被標記為已訪問或直到沒有未訪問的鄰域像素為止。

68707b8c-a304-11ee-8b88-92fbcf53809c.gifseed-filling.gif

Part33. OpenCV 自帶的連通域函數

OpenCV 提供了兩個函數:connectedComponents()、connectedComponentsWithStats() 在二值圖像中查找連通域。

下面的例子,在圖中找到連通域并標記不同的顏色。

#include
#include
#include"opencv2/imgproc.hpp"
#include"opencv2/highgui.hpp"

usingnamespacestd;
usingnamespacecv;

voidlabelColor(Mat&labelImg,Mat&dst)
{
mapcolors;

intwidth=labelImg.cols;
intheight=labelImg.rows;

dst=Mat::zeros(labelImg.size(),CV_8UC3);

ucharr=255*(rand()/(1.0+RAND_MAX));
ucharg=255*(rand()/(1.0+RAND_MAX));
ucharb=255*(rand()/(1.0+RAND_MAX));

for(inti=0;i(i);
uchar*data_dst=dst.ptr(i);

for(intj=0;j=1)
{
if(colors.count(pixelValue)==0)
{
colors[pixelValue]=Scalar(b,g,r);
r=255*(rand()/(1.0+RAND_MAX));
g=255*(rand()/(1.0+RAND_MAX));
b=255*(rand()/(1.0+RAND_MAX));
}

Scalarcolor=colors[pixelValue];
*data_dst++=color[0];
*data_dst++=color[1];
*data_dst++=color[2];
}
else
{
data_dst++;
data_dst++;
data_dst++;
}
}
}
}

intmain(intargc,char**argv){
Matsrc=imread(".../coins.jpg");
imshow("src",src);

Matgray,thresh;
cvtColor(src,gray,cv::COLOR_BGR2GRAY);//灰度化
imshow("gray",gray);

Matgauss;
GaussianBlur(gray,gauss,Size(15,15),0);//降噪

threshold(gauss,thresh,0,255,THRESH_BINARY|THRESH_OTSU);
imshow("thresh",thresh);

Matlabels,stats,centroids;
intnum_labels=connectedComponents(thresh,labels,8,CV_32S);
cout<
原圖和灰度化.png 二值化和標記連通域.png
intconnectedComponents(InputArrayimage,OutputArraylabels,intconnectivity,intltype,intccltype);

其各個參數的含義:

第一個參數 image:輸入圖像必須是二值圖像1。第二個參數 labels:輸出圖像,其中每個像素值表示其所在連通域的標簽。標簽的值從 0 開始,依次遞增。第三個參數 connectivity:標記連通域時使用的鄰域種類。可選的是 4、8,默認值是 8。第四個參數 ltype:輸出標簽的類型。可以設置為 CV_32S 或 CV_16U,默認值是 CV_32S 。第五個參數 ccltype:標記連通域分析算法的類型。

參數類型 作用
CCL_WU 0 8 鄰域和 4 鄰域均用 SAUF 算法。
CCL_DEFAULT -1 8 鄰域用 BBDT 算法,4 鄰域用 SAUF 算法。
CCL_GRANA 1 8 鄰域用 BBDT 算法,4 鄰域用 SAUF 算法。

connectedComponentsWithStats() 函數除了返回每個連通域的標簽之外,還返回每個連通域的其他信息,包括:

面積

外接矩形

中心坐標

intmain(intargc,char**argv){
Matsrc=imread(".../coins.jpg");
imshow("src",src);

Matgray,thresh;
cvtColor(src,gray,cv::COLOR_BGR2GRAY);//灰度化
imshow("gray",gray);

Matgauss;
GaussianBlur(gray,gauss,Size(15,15),0);//降噪

threshold(gauss,thresh,0,255,THRESH_BINARY|THRESH_OTSU);
imshow("thresh",thresh);

Matlabels,stats,centroids;
intnum_labels=connectedComponentsWithStats(thresh,labels,stats,centroids);
cout<(i,CC_STAT_AREA);
intleft=stats.at(i,CC_STAT_LEFT);
inttop=stats.at(i,CC_STAT_TOP);
intwidth=stats.at(i,CC_STAT_WIDTH);
intheight=stats.at(i,CC_STAT_HEIGHT);
intcx=centroids.at(i,0);
intcy=centroids.at(i,1);

cout<

執行結果:

num_labels=8
Object1:Area=17061,Left=344,Top=160,Width=144,Height=151,Centroid=(415,234)
Object2:Area=9655,Left=592,Top=411,Width=108,Height=114,Centroid=(645,467)
Object3:Area=9558,Left=776,Top=441,Width=108,Height=113,Centroid=(828,497)
Object4:Area=17874,Left=435,Top=517,Width=150,Height=152,Centroid=(509,592)
Object5:Area=17502,Left=660,Top=648,Width=148,Height=151,Centroid=(733,723)
Object6:Area=10420,Left=726,Top=864,Width=114,Height=117,Centroid=(782,922)
Object7:Area=15634,Left=628,Top=1075,Width=141,Height=143,Centroid=(698,1146)

Part44. 總結

連通域分析是圖像處理中常用的算法之一,用于在二值圖像中找到具有相同像素值且相互連接的區域。它在圖像處理中具有廣泛的應用場景。

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 算法
    +關注

    關注

    23

    文章

    4599

    瀏覽量

    92642
  • 圖像
    +關注

    關注

    2

    文章

    1083

    瀏覽量

    40415
  • 函數
    +關注

    關注

    3

    文章

    4304

    瀏覽量

    62429
  • OpenCV
    +關注

    關注

    30

    文章

    628

    瀏覽量

    41262

原文標題:OpenCV4筆記 之 連通域分析

文章出處:【微信號:CVSCHOOL,微信公眾號:OpenCV學堂】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    ACER 370筆記本電腦主板電路圖

    本帖最后由 gk320830 于 2015-3-9 03:41 編輯 ACER 370筆記本電腦主板電路圖
    發表于 08-16 20:45

    愛鼓搗stm32筆記

    愛鼓搗stm32筆記1-4
    發表于 06-16 17:37

    STM32筆記 EXIT(外部中斷)精選資料分享

    /O映像三、中斷服務四、配置流程(代碼解析)五、中斷函數處理在上一篇STM32筆記 GPIO引腳中,有用到 EXIT外部中斷作為 Key輸入觸發,所以本篇來...
    發表于 08-05 06:10

    東芝SATELLITE 1410/2410筆記本電腦用戶手冊

    東芝SATELLITE 1410/2410筆記本電腦用戶手冊
    發表于 07-28 22:59 ?23次下載

    acer390筆記本主板電路圖資料

    acer390筆記本主板電路圖,原理圖資料。
    發表于 08-22 09:12 ?1398次下載
    acer390<b class='flag-5'>筆記</b>本主板電路圖資料

    華碩ASUS F7KR R2.0.0筆記本原理圖

    華碩ASUS F7KR R2.0.0筆記本原理圖:
    發表于 03-02 16:15 ?799次下載
    華碩ASUS F7KR R2.0.0<b class='flag-5'>筆記</b>本原理圖

    簡易AD13筆記

    個人資料心得,一點一點,不多,請見諒!13筆記,有點用
    發表于 11-17 11:43 ?9次下載

    STM32各模塊學習筆記

    ..........................................................4 STM32筆記四 STM32中定時器的時鐘源............................15
    發表于 11-30 03:32 ?3142次閱讀

    聯想電腦維修實際案例--G470筆記本電路分析

    聯想電腦維修實際案例--G470筆記本電路分析
    發表于 02-03 10:45 ?332次下載

    惠普G4-2000筆記本的電路原理圖合集

    本文檔的主要內容詳細介紹的是惠普1000 G4-2000 CQ35-701TU CQ45筆記本的電路原理圖合集。
    發表于 10-29 08:00 ?15次下載
    惠普G<b class='flag-5'>4</b>-2000<b class='flag-5'>筆記</b>本的電路原理圖合集

    基于opencv4和Yolo-Fastest,實現PC和單片機通信,控制步進電機捕獲目標

    效果視頻 基于opencv4和yolo,實現PC和單片機通信,控制步進電機捕獲目標
    發表于 11-23 17:36 ?16次下載
    基于<b class='flag-5'>opencv4</b>和Yolo-Fastest,實現PC和單片機通信,控制步進電機捕獲目標

    [筆記]|[stm32]|[寄存器存儲器區別]|[PWM]|[串口]|[Timer]stm32f103筆記

    [筆記]|[stm32]|[寄存器存儲器區別]|[PWM]|[串口]|[Timer]stm32f103筆記筆記為18.12.21者期末復習所寫 ——僅作為自己期末復習以及過后查閱
    發表于 12-06 18:51 ?10次下載
    [<b class='flag-5'>筆記</b>]|[stm32]|[寄存器存儲器區別]|[PWM]|[串口]|[Timer]stm32f103<b class='flag-5'>筆記</b>

    如何在Raspberry Pi 3上安裝OpenCV4

    今天我們將學習如何在 Raspberry Pi 3 上安裝 OpenCV4 庫,以便我們可以將其用于計算機視覺應用程序。這將允許 OpenCV 在像 Pi 這樣的便攜式設備上運行,從而打開許多可能性的大門。所以讓我們開始吧
    的頭像 發表于 09-08 16:09 ?1577次閱讀
    如何在Raspberry Pi 3上安裝<b class='flag-5'>OpenCV4</b>庫

    OpenCV4源碼分析

    宏定義必須寫在函數之外,其作用是 #define 開始,到源程序結束。如果要提前結束它的作用則用 #undef 命令
    的頭像 發表于 02-22 10:00 ?932次閱讀
    <b class='flag-5'>OpenCV4</b>源碼<b class='flag-5'>分析</b>

    學習OpenCV4的系統化路線圖

    OpenCV4發布測試版本開始,作者就一直關注!根據自己近十年圖像處理OpenCV開發相關工作經驗,花了七個月的時間,針對OpenCV4、精心選擇OpenCV中常用模塊與知識點,構建
    的頭像 發表于 07-05 11:30 ?597次閱讀
    學習<b class='flag-5'>OpenCV4</b>的系統化路線圖