日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 默认站点!

默认站点

當(dāng)前位置: 首頁 >

opencv使用cvFindContours提取联通域

發(fā)布時(shí)間:2023/11/27 69 豆豆
默认站点 收集整理的這篇文章主要介紹了 opencv使用cvFindContours提取联通域 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

轉(zhuǎn)自:http://hi.baidu.com/irmosgarden/blog/item/8ce0174c54b307fad72afcbc.html

?

// m_imgFeature為黑白目標(biāo)圖像,白色為前景,黑色為背景

// 注意此函數(shù)會修改m_imgFeature內(nèi)容。若其不可更改,應(yīng)另建立副本

// 1. count contour
CvMemStorage* storage = 0;
storage = cvCreateMemStorage(0);???????? //開辟默認(rèn)大小的空間
CvSeq* contour = 0;
cvFindContours( m_imgFeature, storage, &contour, sizeof(CvContour), CV_RETR_EXTERNAL, CV_CHAIN_APPROX_SIMPLE );?????? // 查找外邊緣

int num = 0;
for( ; contour != 0; contour = contour->h_next )
{
?? CvRect rect;
?? rect = cvBoundingRect(contour,0);?????? // 轉(zhuǎn)化為點(diǎn)列
?? m_arrLine.SetSize(num+1);
?? m_arrLine.GetAt(num).SetLine(rect.x,rect.x+rect.width ,rect.y,rect.y+rect.height);
?? num = num+1;??

???? for( i = 0; i < contour->total; i++ )
???? {
??????? CvPoint* line = (CvPoint*)cvGetSeqElem(contour,i);
??????? cvLine( color_dst, line[0], line[1], CV_RGB(255,0,0), 3, 8 );
??? }
}

// .release
cvReleaseMemStorage(&storage);

//end of code

cvFindContours的第5個(gè)參數(shù)

CV_RETR_EXTERNAL??? 查找外邊緣,各邊緣以指針h_next相連

CV_RETR_LIST?????????????? 查找所有邊緣(包含內(nèi)部空洞),各邊緣以指針h_next相連

CV_RETR_CCOMP???????? 查找所有邊緣(包含內(nèi)部空洞)

轉(zhuǎn)自:http://blog.sina.com.cn/s/blog_4bc179a80100hs50.html

?

cvFindContours函數(shù)使用說明

函數(shù)cvFindContours從二值圖像中檢索輪廓,并返回檢測到的輪廓的個(gè)數(shù)。first_contour的值由函數(shù)填充返回,它的值將為第一個(gè)外輪廓的指針,當(dāng)沒有輪廓被檢測到時(shí)為NULL。其它輪廓可以使用h_next和v_next連接,從first_contour到達(dá)。

int cvFindContours( CvArr* image, CvMemStorage* storage, CvSeq** first_contour,
? ?? ?? ?? ?? ?? ???int header_size=sizeof(CvContour), int mode=CV_RETR_LIST,
? ?? ?? ?? ?? ?? ???int method=CV_CHAIN_APPROX_SIMPLE, CvPoint offset=cvPoint(0,0) );

image
8比特單通道的源二值圖像。非零像素作為1處理,0像素保存不變。從一個(gè)灰度圖像得到二值圖像的函數(shù)有:cvThreshold,cvAdaptiveThreshold和cvCanny。

storage
返回輪廓的容器。

first_contour
輸出參數(shù),用于存儲指向第一個(gè)外接輪廓。

header_size
header序列的尺寸.如果選擇method = CV_CHAIN_CODE, 則header_size >= sizeof(CvChain);其他,則
header_size >= sizeof(CvContour)。

mode
檢索模式,可取值如下:
CV_RETR_EXTERNAL:只檢索最外面的輪廓;
CV_RETR_LIST:檢索所有的輪廓,并將其放入list中;
CV_RETR_CCOMP:檢索所有的輪廓,并將他們組織為兩層:頂層是各部分的外部邊界,第二層是空洞的邊界;
CV_RETR_TREE:檢索所有的輪廓,并重構(gòu)嵌套輪廓的整個(gè)層次。

method
邊緣近似方法(除了CV_RETR_RUNS使用內(nèi)置的近似,其他模式均使用此設(shè)定的近似算法)。可取值如下:
CV_CHAIN_CODE:以Freeman鏈碼的方式輸出輪廓,所有其他方法輸出多邊形(頂點(diǎn)的序列)。
CV_CHAIN_APPROX_NONE:將所有的連碼點(diǎn),轉(zhuǎn)換成點(diǎn)。
CV_CHAIN_APPROX_SIMPLE:壓縮水平的、垂直的和斜的部分,也就是,函數(shù)只保留他們的終點(diǎn)部分。
CV_CHAIN_APPROX_TC89_L1,CV_CHAIN_APPROX_TC89_KCOS:使用the flavors of Teh-Chin chain近似算法
的一種。
CV_LINK_RUNS:通過連接水平段的1,使用完全不同的邊緣提取算法。使用CV_RETR_LIST檢索模式能使用此方法。

offset
偏移量,用于移動所有輪廓點(diǎn)。當(dāng)輪廓是從圖像的ROI提取的,并且需要在整個(gè)圖像中分析時(shí),這個(gè)參數(shù)將很有用。

討論部分cvDrawContours中的案例顯示了任何使用輪廓檢測連通區(qū)域。輪廓可以用于形狀分析和目標(biāo)識別——可以參考文件夾OpenCV sample中的squares.c。

總結(jié)

以上是默认站点為你收集整理的opencv使用cvFindContours提取联通域的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得默认站点網(wǎng)站內(nèi)容還不錯(cuò),歡迎將默认站点推薦給好友。

歡迎分享!

轉(zhuǎn)載請說明來源于"默认站点",并保留原作者的名字。

本文地址:opencv使用cvFindContours提取联通域