久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

opencv學(xué)習(xí)

 mscdj 2018-05-04

輪廓提取——主要針對二值圖像

<1> 輪廓分為外輪廓和內(nèi)輪廓  如下圖:外輪廓以c開頭 內(nèi)輪廓以h開頭


<2> opencv 提供了尋找輪廓的函數(shù) inttotals = cvFindContours(img, storage,&contours,sizeof(CvContour),  CV_RETR_LIST, CV_CHAIN_APPROX_NONE,cvPoint(0,0));

其中img是二值圖像,, storage是內(nèi)存存儲序列,, contours指向存儲的第一個輪廓,,

CvMemStorage *storage =cvCreateMemStorage(0);  //內(nèi)存存儲序列

CvSeq *contours = 0;     //指向storage中的序列

 

CV_RETR_LIST表明輪廓在內(nèi)存中的排列方式,,有以下四種:

輪廓的排列方式<在內(nèi)存中>

     CV_RETR_EXTERNAL:first = c0                         

    CV_RETR_CCOMP:從里到外 從右到左    這是一個雙向鏈表

CV_RETR_LIST:

first = c01001 <–> c01000 <–>h0100 <–> h0000 <–> h0100 <–> h0000 <–> c010 <–>c000 <–> h01 <–> h00 <–> c0 這也是雙向鏈表

CV_RETR_TREE

<3>案例

結(jié)果展示:

代碼:

  1. #include <iostream>  
  2. #include "cv.h"  
  3. #include "cxcore.h"  
  4. #include "highgui.h"  
  5. using namespace std;  
  6. int main()  
  7. {  
  8.     CvMemStorage *storage = cvCreateMemStorage(0);   // 內(nèi)存存儲序列  
  9.     IplImage *img = cvLoadImage("E:\\study_opencv_video\\lesson14_1\\Debug\\55.png", 0);  
  10.     IplImage *imgColor = cvCreateImage(cvGetSize(img), 8, 3);  
  11.     IplImage *contoursImage = cvCreateImage(cvGetSize(img), 8, 1);  
  12.   
  13.     CvSeq *contours = 0, *contoursTemp = 0;    
  14.     cvZero(contoursImage);  
  15.     cvThreshold(img, img, 100, 255, CV_THRESH_BINARY);  // 二值化操作  
  16.     cvCvtColor(img, imgColor, CV_GRAY2BGR);  
  17.     int totals = cvFindContours(img, storage,&contours, sizeof(CvContour),    //img必須是一個二值圖像 storage 用來存儲的contours指向存儲的第一個輪廓  
  18.         CV_RETR_CCOMP, CV_CHAIN_APPROX_NONE, cvPoint(0,0));  
  19.     contoursTemp = contours;  
  20.     int count = 0;  
  21.     int i;  
  22.     for(;contoursTemp != 0; contoursTemp = contoursTemp -> h_next)  /// 這樣可以訪問每一個輪廓  ====橫向輪廓  
  23.     {  
  24.         for(i = 0; i < contoursTemp -> total; i++)    // 提取一個輪廓的所有坐標(biāo)點(diǎn)  
  25.         {  
  26.             CvPoint *pt = (CvPoint*) cvGetSeqElem(contoursTemp, i);   // 得到一個輪廓中一個點(diǎn)的函數(shù)cvGetSeqElem  
  27.             cvSetReal2D(contoursImage, pt->y, pt->x, 255.0);  
  28.             cvSet2D(imgColor, pt->y, pt->x, cvScalar(0,0,255,0));  
  29.         }  
  30.         count ++;  
  31.         CvSeq *InterCon = contoursTemp->v_next;     // 訪問每個輪廓的縱向輪廓  
  32.         for(; InterCon != 0; InterCon = InterCon ->h_next)  
  33.         {  
  34.             for(i = 0; i < InterCon->total; i++ )  
  35.             {  
  36.                 CvPoint *pt = (CvPoint*)cvGetSeqElem(InterCon, i);  
  37.                 cvSetReal2D(contoursImage, pt->y, pt->x, 255.0);  
  38.                 cvSet2D(imgColor, pt->y, pt->x, cvScalar(0, 255, 0, 0));  
  39.             }  
  40.         }  
  41.     }  
  42.     cvNamedWindow("contoursImage");  
  43.     cvShowImage("contoursImage", contoursImage);  
  44.     cvNamedWindow("imgColor");  
  45.     cvShowImage("imgColor",imgColor);  
  46.     cvWaitKey(0);  
  47.     cvReleaseMemStorage(&storage);      // 也要釋放內(nèi)存序列空間  
  48.     cvReleaseImage(&contoursImage);  
  49.     cvReleaseImage(&imgColor);  
  50.     cvDestroyWindow("contoursImage");  
  51.     cvDestroyWindow("imgColor");  
  52.     return 0;<span style="font-family:Arial, Helvetica, sans-serif;">}</span>  

作者:小村長  出處:http://blog.csdn.net/lu597203933 歡迎轉(zhuǎn)載或分享,,但請務(wù)必聲明文章出處。 (新浪微博:小村長zack, 歡迎交流?。?/span>

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn),。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點(diǎn)擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多