图像轮廓的提取和绘制
轉自:http://blog.csdn.net/gnuhpc/archive/2009/06/18/4278105.aspx
?
<>var ultimaFecha = ' '; <>document.write(ultimaFecha); #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);
}
?
總結
以上是生活随笔為你收集整理的图像轮廓的提取和绘制的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 边缘检测、Hough变换、轮廓提取、种子
- 下一篇: OpenCV中常用到的轮廓处理函数汇总