为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

图像轮廓提取

2017-09-28 4页 doc 30KB 25阅读

用户头像

is_721103

暂无简介

举报
图像轮廓提取图像轮廓提取 OpenCV笔记9:提取并显示图像轮廓 01 #include 02 #include 03 #include 04 #include 05 void main() 06 { 07 int i=0; 08 int mode=CV_RETR_CCOMP; //提取轮廓的模式 09 int contoursNum=0; //提取轮廓的数目 10 CvScalar externalColor; 11 CvScalar holeColor; 12 CvMemStorage * storag...
图像轮廓提取
图像轮廓提取 OpenCV笔记9:提取并显示图像轮廓 01 #include 02 #include 03 #include 04 #include 05 void main() 06 { 07 int i=0; 08 int mode=CV_RETR_CCOMP; //提取轮廓的模式 09 int contoursNum=0; //提取轮廓的数目 10 CvScalar externalColor; 11 CvScalar holeColor; 12 CvMemStorage * storage=cvCreateMemStorage(0); //提取轮廓需要的储存容量 0为默认64KB 13 CvSeq * pcontour=0; //提取轮廓的序列指针 14 IplImage * pImg=NULL; 15 IplImage * pContourImg=NULL; 16 IplImage * src=cvLoadImage("pic3.png",-1); 17 pImg=cvCreateImage(cvGetSize(src),src->depth,1); 18 pContourImg=cvCreateImage(cvGetSize(pImg),IPL_DEPTH_8U,3); 19 cvCvtColor(src,pImg,CV_RGB2GRAY); //将图像转换为灰度 20 cvNamedWindow("src",CV_WINDOW_AUTOSIZE); 21 cvNamedWindow("pcontour",CV_WINDOW_AUTOSIZE); 22 cvShowImage("src",src); 23 cvThreshold(pImg,pImg,180,255,CV_THRESH_BINARY); //二值化 24 //--------------查找轮廓---------------- 25 mode=CV_RETR_LIST; 26 contoursNum=cvFindContours(pImg,storage,& pcontour,sizeof(CvContour),mode,CV_CHAIN_APPRO X_NONE); 27 cout<h_next) 30 { 31 holeColor=CV_RGB(rand()&255,rand()&255,rand()&255); 32 externalColor=CV_RGB(rand()&255,rand()&255,rand()&255); 33 cvDrawContours(pContourImg,pcontour,externalColor,holeColor,1,2,8); 34 } 35 cvShowImage("pcontour",pContourImg); 36 cvWaitKey(0); 37 cvReleaseImage(&src); 38 cvReleaseImage(&pImg); 39 cvReleaseImage(&pContourImg); 40 } ========================================================== ========================================================== cvFindContours原型: 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 ōffset=cvPoint(0,0) ); image 输入的 8-比特、单通道图像。为了从灰度图像中得到这样的二值图像,可以使用 cvThreshold、cvAdaptiveThreshold 或 cvCanny,改变输入图像内容。 storage 得到的轮廓的存储容器 first_contour 输出参数:包含第一个输出轮廓的指针 header_size 如果 method=CV_CHAIN_CODE,则序列头的大小 >=sizeof(CvChain),否则 >=sizeof(CvContour)。 mode 提取模式: CV_RETR_EXTERNAL - 只提取最外层的轮廓; CV_RETR_LIST - 提取所有轮廓,并且放置在 list 中; CV_RETR_CCOMP - 提取所有轮廓,并且将其组织为两层的 hierarchy: 顶层为连通域的外围边界,次层为洞的内层边界; CV_RETR_TREE - 提取所有轮廓,并且重构嵌套轮廓的全部 hierarchy; method 逼近方法: (对所有节点, 不包括使用内部逼近的 CV_RETR_RUNS) CV_CHAIN_CODE - Freeman 链码的输出轮廓. 其它方法输出多边形(定点序列); CV_CHAIN_APPROX_NONE - 将所有点由链码形式翻译为点序列形式; CV_CHAIN_APPROX_SIMPLE - 压缩水平、垂直和对角分割,即函数只保留末端的象素点; CV_CHAIN_APPROX_TC89_L1, CV_CHAIN_APPROX_TC89_KCOS - 应用 Teh-Chin 链逼近算法; CV_LINK_RUNS - 通过连接为 1 的水平碎片使用完全不同的轮廓提取算法; offset 每一个轮廓点的偏移量,当轮廓是从图像 ROI 中提取出来的时候,使用偏移量有用,因为可以从整个图像上下文来对轮廓做分析。 函数 cvFindContours 从二值图像中提取轮廓,并且返回提取轮廓的数目。 指针 first_contour 的内容由函数填写。它包含第一个最外层轮廓的指针,如果指针为 NULL,则没有检测到轮廓(比如图像是全黑的)。其它轮廓可以从 first_contour 利用 h_next 和 v_next 链接访问到。 在 cvDrawContours 的样例显示如何使用轮廓来进行连通域的检测。
/
本文档为【图像轮廓提取】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索