分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!
在本文中使用影象連通域統計使用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...