opencv實現連通域

2021-08-31 19:59:44 字數 2396 閱讀 5103

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!

在本文中使用影象連通域統計使用opencv中的cvfloodfill方法,但是在cvfloodfill方法中cvconnectedcomp引數無法返回具體點座標位置資訊,找了些資料、給cvseq分配空間但是還是contour內容沒有值,估計是opencv2.00版本不支援。如果想獲取點座標資訊有兩種方法:一是通過源**改寫cvfloodfill函式來返回點座標資訊;二是cvfloodfill連通之後,根據返回區域統計多少個點,並統計之後對此點做標記,依次反覆下乙個連通區域。

以下是方法二的**實現:

//連通區域結構

typedef struct myconnectedcomp

myconnectedcomp

/**功能說明:統計影象的連通區域

*引數說明:src,表示原始圖象;rectsrc,表示影象區域;listdata,表示連通域結構鍊錶;nunioncolor,表示連通顏色(0,表示黑點;1,表示白點);nunionmode,表示連通型別(0,表示4連通;1,表示8連通)

*返回值:int型別。-1,表示引數錯誤;0,表示非二值/灰度影象

*/int imageunionbyfloodfill(cximage *src,rect rectsrc,list&listdata,int nunioncolor,int nunionmode)

if(src->getbpp()>8)

listdata.clear();

int ncolor = 255;

if(nunioncolor==0)

if(nunioncolor==1)

int nflag = 4;

if(nunionmode==1)

if(nunionmode==2)

int ibackcolor = getblackcolor(*src);

long i = 0,j = 0;

long m = 0,n = 0,newn = 0,newm = 0;

long nwidth = 0,nheight = 0;

iplimage *pcvimagetmp = null;

if(!cximage2iplimage(src,&pcvimagetmp))

//如果是灰度影象,做二值化處理

if(src->getbpp()!=1)

cvsize size = cvgetsize(pcvimagetmp);

cvconnectedcomp dcctmp;

cvconnectedcomp comp;

cvpoint seed;

for(j=rectsrc.top;j=size.width || j<0 || j>=size.height)

uchar *p = (uchar *)&(pcvimagetmp->imagedata+j*pcvimagetmp->widthstep)[i]; 

if(*p==nunioncolor || *p==100 || *p==101)

//處理為黑點,做連通

seed = cvpoint(i,j);

cvfloodfill(pcvimagetmp, seed,cvscalarall(100), cvscalarall(0),cvscalarall(0), &comp, nflag, 0 );  

dcctmp.area = comp.area;

dcctmp.rect.left = comp.rect.x;

dcctmp.rect.top = comp.rect.y;

dcctmp.rect.right = comp.rect.x + comp.rect.width;

dcctmp.rect.bottom = comp.rect.y + comp.rect.height;

dcctmp.value = int(comp.value.val[1]);

dcctmp.listallpoint.clear();

point ptinsert;

for(n=0;n<=comp.rect.height;n++)

uchar *q = (uchar *)&(pcvimagetmp->imagedata+newn*pcvimagetmp->widthstep)[newm]; 

if(*q==100)}}

listdata.push_back(dcctmp);}}

cvreleaseimage(&pcvimagetmp);

return nret;

}注:cximage是一款優秀的影象操作類庫。它可以快捷地訪問、顯示、轉換各種影象。

給我老師的人工智慧教程打call!

opencv實現連通域

文章 在本文中使用影象連通域統計使用opencv中的cvfloodfill方法,但是在cvfloodfill方法中cvconnectedcomp引數無法返回具體點座標位置資訊,找了些資料 給cvseq分配空間但是還是contour內容沒有值,估計是opencv2.00版本不支援。如果想獲取點座標資訊...

opencv實現連通域

在本文中使用影象連通域統計使用opencv中的cvfloodfill方法,但是在cvfloodfill方法中cvconnectedcomp引數無法返回具體點座標位置資訊,找了些資料 給cvseq分配空間但是還是contour內容沒有值,估計是opencv2.00版本不支援。如果想獲取點座標資訊有兩種...

opencv連通域分析

opencv連通域分析 include include using namespace std using namespace cv typedef struct connectedcomponentanalysis struct cca struct enum connectedcomponent...