【OpenCV學習】圖像輪廓的提取和繪制


作者:gnuhpc
出處:http://www.cnblogs.com/gnuhpc/

#include "highgui.h"
#include "cv.h"
#include <iostream>
#include <iomanip>

using namespace std;

int main(void)
{
    int i=0;
    int mode = CV_RETR_CCOMP;//設置提取輪廓模式
    int contours_num=0;//提取輪廓的數目
    CvScalar external_color;//繪制輪廓線的顏色
    CvScalar hole_color;
    CvMemStorage *storage = cvCreateMemStorage(0);
    CvSeq *contours =0;//存儲提取的輪廓圖像

    IplImage *pImg = NULL;
    IplImage *pContourImg = NULL;//顯示提取的輪廓圖像
    IplImage *src=/blog.armyourlife.info/cvLoadImage("1.png",1);

    pImg = cvCreateImage(cvGetSize(src),src->depth,1);
    pContourImg =cvCreateImage(cvGetSize(pImg),IPL_DEPTH_8U,3);
    cvCvtColor(src,pImg,CV_BGR2GRAY);//將讀取的圖像轉化為灰度圖像
    cvNamedWindow("src",1);
    cvNamedWindow("contour",1);
    cvShowImage("src",src);//顯示原圖
    cvThreshold(pImg,pImg,200,255,CV_THRESH_BINARY);//二值化
    mode = CV_RETR_LIST;
    contours_num=cvFindContours(pImg,storage,&contours,sizeof(CvContour),mode,CV_CHAIN_APPROX_NONE);
    cout<<contours_num<<" "<<endl;//打印找到的輪廓的數目
    for (;contours!=0;contours=contours->h_next)
    {
        hole_color=CV_RGB(rand()&255,rand()&255,rand()&255);
        external_color = CV_RGB(rand()&255,rand()&255,rand()&255);
        cvDrawContours(pContourImg,contours,external_color,hole_color,1,2,8);
    }

    cvShowImage("contour",pContourImg);
    cvWaitKey(0);
    cvReleaseImage(&src);
    cvReleaseImage(&pImg);
    cvReleaseImage(&pContourImg);
    cvReleaseMemStorage(&storage);
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM