




已阅读5页,还剩4页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
使用轮廓扫描器查找轮廓(组合函数)喻小波总述:2API函数名:2运行实例效果:2cvStartFindContours函数:3输入:3输出:3运行逻辑:4cvFindNextContour函数:5输入:5输出:5运行逻辑:5cvSubstituteContour函数:6输入:6输出:6运行逻辑:6cvEndFindContours函数:6输入:6输出:6运行逻辑:6运行实例:7使用场合:7使用注意:7例子流程:7综合总结:7总述: 本文中四个API是一组,是一种轮廓查找的方法!(Cvcontours.c),API运行效果见实例运行效果!这四个API为了解决一幅图像有多个轮廓的问题,通过这四个API可将一幅图像中多个轮廓变成多个序列块。而FINDCONTOURS,是将所有的轮廓做一个序列链表,无法实现多个轮廓序列块的地址。API函数名:cvStartFindContours:初始化轮廓扫描器cvFindNextContour:使用初始好的轮廓扫描器查找一个轮廓(返回序列指针)cvSubstituteContour:用户自定义的轮廓替换前一次的函数cvFindNextContour所提取的轮廓cvEndFindContours:结束轮廓扫描器,也就是释放扫描器空间运行实例效果:四个API一个实例!见实例。cvStartFindContours函数:cvStartFindContours( void* _img, CvMemStorage* storage, int header_size, int mode, int method, CvPoint offset )输入:image 输入的 8-比特、单通道二值图像 输出:一个被初始好的轮廓扫描器(CvContourScanner),这个会被下一个API函数(FindNextContour)所使用.实现参数选择:storage 提取到的轮廓容器,也就是CvMemStorage开辟的内存块!header_size 序列头的尺寸 .常用的方法, sizeof(CvContourEx),mode 提取模式 .有四种提取方法 CV_RETR_EXTERNAL - 只提取最外层的轮廓 CV_RETR_LIST - 提取所有轮廓,并且放置在 list 中 CV_RETR_CCOMP - 提取所有轮廓,并且将其组织为两层的 hierarchy: 顶层为连通域的外围边界,次层为洞的内层边界。 CV_RETR_TREE - 提取所有轮廓,并且重构嵌套轮廓的全部 hierarchy method 逼近方法 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 的水平碎片使用完全不同的轮廓提取算法。仅有 CV_RETR_LIST 提取模式可以在本方法中应用. offset 每一个轮廓点的偏移量,ROI 偏移量 ,常用方法cvPoint(0,0),也就是偏移量对整个图像有效!运行逻辑:本API函数,就是对轮廓扫描器(CvContourScanner数据结构体)进行初始化,返回的给FindNextContour API函数使用!首先,判断输入的内存块(指针不为空)和图像数据(8位单通道)的数据格式是否正确,初始化(CvContourScanner)结构体中的成员,然后对传入的图像进行二值化,方式为CV_THRESH_BINARY,如果初始化成功就返回轮廓扫描器的指针头. 本API无运行实例,因为它返回是轮廓扫描器的头!另附:轮廓扫描器的数据结构:typedef struct _CvContourScanner CvMemStorage *storage1; /*包含提取的轮廓*/ CvMemStorage *storage2; /*载有近似等高线 (!=storage1 if approx_method2 != approx_method1) */ CvMemStorage *cinfo_storage; /*存放轮廓信息节点*/ CvSet *cinfo_set; /* 轮廓信息的设置 */ CvMemStoragePos initial_pos; /* starting storage pos */ CvMemStoragePos backup_pos; /* beginning of the latest approx. contour */ CvMemStoragePos backup_pos2; /* ending of the latest approx. contour */ char *img0; /* image origin */ char *img; /* current image row */ int img_step; /* image step */ CvSize img_size; /* ROI size */ CvPoint offset; /* ROI offset: coordinates, added to each contour point */ CvPoint pt; /* current scanner position */ CvPoint lnbd; /* position of the last met contour */ int nbd; /* current mark val */ _CvContourInfo *l_cinfo; /* information about latest approx. contour */ _CvContourInfo cinfo_temp; /* temporary var which is used in simple modes */ _CvContourInfo frame_info; /* information about frame */ CvSeq frame; /* frame itself */ int approx_method1; /* approx method when tracing */ int approx_method2; /* final approx method */ int mode; /* contour scanning mode: 0 - external only 1 - all the contours w/o any hierarchy 2 - connected components (i.e. two-level structure - external contours and holes) */ int subst_flag; int seq_type1; /* type of fetched contours */ int header_size1; /* hdr size of fetched contours */ int elem_size1; /* elem size of fetched contours */ int seq_type2; /* */ int header_size2; /* the same for approx. contours */ int elem_size2; /* */ _CvContourInfo *cinfo_table126;_CvContourScanner;cvFindNextContour函数:CvSeq* cvFindNextContour( CvContourScanner scanner )确定和提取图像的下一个轮廓,并且返回它的指针。若没有更多的轮廓,则函数返回 NULL输入:scanner一个初始化好的轮廓扫描器。输出:CvSeq返回查找到的轮廓(序列)。运行逻辑:首先判断轮廓扫描器信息(_CvContourInfo),将即将查找到的轮廓(序列)开辟空间和将扫描器信息结构值0,表示序列链表的最后(icvEndProcessContour通过此函数完成),然后,按行方式,以初始化时的STEP为步长,再按列,步长为1,通过(icvTraceContour)此函数查找图像中所有的轮廓区域,并返回第一个区域的轮廓区域信息结构体,同时也将轮廓区域信息链表指向下一个,对选定的区域寻找起始点,然后对区域进行边界扫描跟踪(根据不同的逼近方式和轮廓类型)icvFetchContour,得边界轮廓。然后再对扫描器信息结构体进行赋值,将区域链表指针指向下一个区域,下一次调用此函数时,就从这个轮廓区域开始。最后将找到的轮廓坐标点存放到中序列,一个序列存放一个轮廓区域的轮廓信息,多个轮廓序列形成轮廓序列链表。其结束为就是两个3X3卷积核中心点的领域,通过四连通方式比较,得到就是轮廓点一个像素,然后将轮廓点,按序列的方式存储得到我们所操作的轮廓序列头.cvSubstituteContour函数:void cvSubstituteContour( CvContourScanner scanner, CvSeq* new_contour );替换提取的轮廓;输入:scanner初始化的轮廓扫描器contour新轮廓序列输出:无void运行逻辑:修改扫描器信息结构体,将输出的新轮廓序列的地址,替换原来的。这个怎么理解?cvEndFindContours函数:CvSeq* cvEndFindContours( CvContourScanner* scanner )结束扫描过程,返回序列链表头。输入:scanner被初始化的轮廓扫描器输出:CvSeq序列链表头运行逻辑:调用icvEndProcessContour,释放存储内存空间。将返回最高层的第一个轮廓的指针运行实例: 本实例综合,综合Cvcontours.c文件中的三个API,对图像进行轮廓查找,目的是验证三个API的组合使用,其表现形式是找到一个轮廓,用篮线标出,输入任意键,查找下一个轮廓。具体例子效果见实际运行!(本例子存在一些问题,但能说明三个API的使用)使用场合:一幅图像中多个轮廓的查找,选取有用的轮廓。(序列)使用注意:注意例子中所使用的指针变量,防止内存泄漏!三个函数必须组合使用!例子流程:综合总结:上面的流程图,只是简要说明,具体细节见C文件!1、 本例子是一种不同的轮廓查找的办法。图像中查找到轮廓序列是相互独立的。2、 本例子中使用到了很多的序列操作。使用时需要注意。3、 使用时很容易出现内存泄漏4、 改进意见暂无! #include cv.h#include cxcore.h#include highgui.hCvSeq* contour = NULL;double minarea = 10000.0;double tmparea = 0.0;void main()CvMemStorage* storage = cvCreateMemStorage(0);IplImage* img_src = cvLoadImage(1.bmp, CV_LOAD_IMAGE_GRAYSCALE);/显示原始图像cvNamedWindow(img_src,CV_WINDOW_AUTOSIZE);cvShowImage(img_src, img_src);IplImage* img_dst = cvCreateImage(cvGetSize(img_src),IPL_DEPTH_8U,1);/-搜索二值图中的轮廓,并从轮廓树中删除面积小于某个阈值minarea的轮廓-/CvScalar color = cvScalar(255,0,0);/CV_RGB(128,0,0);CvContourScanner scanner = NULL;/初始化轮廓扫描器scanner = cvStartFindContours(img_src,storage,sizeof(CvContour),CV_RETR_TREE,CV_CHAIN_APPROX_SIMPLE,cvPoint(0,0);/开始遍历轮廓树while (contour=cvFindNextContour(scanner)tmparea = fabs(cvContourArea(contour);if (tmparea minarea)cvSubstituteContour(scanner,NULL);/删除当前的轮廓/结束轮廓搜索,并返回轮廓树的根节点contour = cvEndFindContours(&scanner);/绘制经过删除操作后图像中剩下的轮廓/cvZero(img_dst);cvDrawCon
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- c1可以考道路运输从业资格证考试及答案解析
- Lesson 3 Sports Stars教学设计-2025-2026学年高中英语北师大版必修一-北师大版2004
- 九年级音乐第一单元《祖国不会忘记》说课稿
- 2023八年级生物下册 第八单元 健康地生活 第三章 了解自己增进健康第1节评价自己的健康状况说课稿 (新版)新人教版
- 小学信息技术五年级下册第8课《体验控制系统》教学设计
- 2025年电容屏触控芯片行业研究报告及未来行业发展趋势预测
- 家具配件厂工具报废审批管理规定
- 2025年雕刻工艺品行业研究报告及未来行业发展趋势预测
- 2025年辅助生殖医疗机构行业研究报告及未来行业发展趋势预测
- 2025年干乳制品行业研究报告及未来行业发展趋势预测
- 2025年律师培训试题(含答案)
- 2025年三力模拟测试题及答案
- 西畴殡葬管理办法
- 脑脓肿病例分析课件
- 公立医院资金管理办法
- 边坡作业安全教育培训
- 印染工厂设计
- ktv安全消防管理制度
- 《子宫颈癌筛查规范(2025年版)》解读
- 政府夜市活动方案
- 党校中青班入学考试试题及答案
评论
0/150
提交评论