OpenCV 輪廓處理

2021-07-15 03:48:03 字數 1761 閱讀 6105

在qt中使用opencv庫,下面是輪廓處理的程式

void secondwindow::on_pushbutton_4_clicked()

else}}

cvsmooth(gray, gray,cv_gaussian,3,3,0,0); //cvsmooth函式平滑濾波

cvseq* contour = 0; //cvseq型別 存放檢測到的影象輪廓邊緣所有的畫素序列,座標值特徵的結構體以鍊錶形式

cvmemstorage* storage = cvcreatememstorage(0); //開闢記憶體空間

cvrect rect = cvboundingrect(contour, 0); //cvboundingrect 計算得出外接矩形的頂點座標rect.x, rect.y ,和矩形的高 rect.height,寬rect.width。

ui->label_4->settext(qstring::number(rect.y,10)); //列印座標到qt的label上

ui->label_3->settext(qstring::number(rect.x,10));

ui->label_5->settext(qstring::number(rect.width,10));

ui->label_6->settext(qstring::number(rect.height,10));

}

說明:

1.cvtcolor函式用來轉換影象,轉換的格式可以是

cv_rgb2gray            //彩色影象---灰度影象

cv_bgr2hsv, cv_rgb2hsv,cv_hsv2bgr, cv_hsv2rgb    //bgr與hsv相互轉化

cv_bgr2ycrcb, cv_rgb2ycrcb, cv_ycrcb2bgr,cv_ycrcb2rgb

2.程式中使用到單通道的影象賦值多通道可以是

iplimage* img=cvcreateimage(cvsize(640,480),ipl_depth_8u,3);

((uchar *)(img->imagedata + i*img->widthstep))[j*img->nchannels + 0]=0; // b

((uchar *)(img->imagedata + i*img->widthstep))[j*img->nchannels + 1]=0; // g

((uchar *)(img->imagedata + i*img->widthstep))[j*img->nchannels + 2]=0; // r

3.cvfindcontours函式用來提取輪廓

檢查的模式可以分為:

cv_retr_external:只檢索最外面的輪廓;

cv_retr_list:檢索所有的輪廓,並將其放入list中;

cv_retr_ccomp:檢索所有的輪廓,並將他們組織為兩層:頂層是各部分的外部邊界,第二層是空洞的邊界;

cv_retr_tree:檢索所有的輪廓,並重構巢狀輪廓的整個層次。

邊緣處理方式可以分為:    

cv_chain_code:以freeman鏈碼的方式輸出輪廓,所有其他方法輸出多邊形(頂點的序列)。

cv_link_runs:通過連線水平段的1,使用完全不同的邊緣提取演算法。使用cv_retr_list檢索模式能使用此方法。

opencv 輪廓描述

上午主要學習了鏈碼的有關知識,鏈碼是一種表示方法,是用於表示有順序連線的具有指定長度了方向的直線段組成的邊界線,典型的情況下,這種表示方法基於4或8連線,經常選用更大間隔的網格對邊界進行重取樣,邊界的鏈碼取決於初始點,然而,此編碼可以通過簡單的過程實現初始點的歸一化,將鏈碼看成是方向編號的迴圈序列,...

opencv 輪廓應用

typedef struct cvseq cvseq define cv contour fields cv sequence fields cvrect rect int color int reserved 3 typedef struct cvcontour cvcontour 則 cvcon...

opencv 輪廓屬性

1.aspect ratio寬與高之比 cv2 boundingrect cnt 2.extent 目標面積 佔 邊界矩形框 的比例area cv2.contourarea cnt x,y,w,h cv2.boundingrect cnt rect area w h extent float are...