aihot  2017-06-01 20:40:34  OpenCV |   查看评论   

 

 

  1. // m_imgFeature为黑白目标图像,白色为前景,黑色为背景

  2. // 注意此函数会修改m_imgFeature内容。若其不可更改,应另建立副本

  3. // 1. count contour
  4. CvMemStorage* storage = 0;
  5. storage = cvCreateMemStorage(0);         //开辟默认大小的空间
  6. CvSeq* contour = 0;
  7. cvFindContours( m_imgFeature, storage, &contour, sizeof(CvContour), CV_RETR_EXTERNAL, CV_CHAIN_APPROX_SIMPLE );       // 查找外边缘

  8. int num = 0;
  9. for( ; contour != 0; contour = contour->h_next )
  10. {
  11.    CvRect rect;
  12.    rect = cvBoundingRect(contour,0);       // 转化为点列
  13.    m_arrLine.SetSize(num+1);
  14.    m_arrLine.GetAt(num).SetLine(rect.x,rect.x+rect.width ,rect.y,rect.y+rect.height);
  15.    num = num+1;  

  16.      for( i = 0; i < contour->total; i++ )
  17.      {
  18.         CvPoint* line = (CvPoint*)cvGetSeqElem(contour,i);
  19.         cvLine( color_dst, line[0], line[1], CV_RGB(255,0,0), 3, 8 );
  20.     }
  21. }

  22. // .release
  23. cvReleaseMemStorage(&storage);

 //////////////////end of code////////////////////////////

cvFindContours的第5个参数

CV_RETR_EXTERNAL    查找外边缘,各边缘以指针h_next相连

CV_RETR_LIST               查找所有边缘(包含内部空洞),各边缘以指针h_next相连

CV_RETR_CCOMP         查找所有边缘(包含内部空洞)

 

除特别注明外,本站所有文章均为 赢咖4注册 原创,转载请注明出处来自opencv使用cvFindContours提取联通域

留言与评论(共有 0 条评论)
   
验证码:
[lianlun]1[/lianlun]