查找边界

来源:互联网 发布:淘宝手机卡实名流程 编辑:程序博客网 时间:2024/06/08 07:41

#ifdef _CH_
#pragma package <opencv>
#endif

#pragma comment(lib,"cv.lib")
#pragma comment(lib,"cvcam.lib")
#pragma comment(lib,"cxcore.lib")
#pragma comment(lib,"highgui.lib")

#include <cv.h>
#include <cvcam.h>
#include <cxcore.h>
#include <highgui.h>

void main()
{
 IplImage *pImg=NULL;
 IplImage *pContourImg=NULL;

 CvMemStorage *storage=cvCreateMemStorage(0);
 CvSeq *contour=NULL;

 int mode=CV_RETR_CCOMP;
 //载入图像,强制转化为灰度
 pImg=cvLoadImage("1.jpg",CV_LOAD_IMAGE_GRAYSCALE);
 assert(pImg!=NULL);

 cvNamedWindow("Show_Src",CV_WINDOW_AUTOSIZE);
 cvShowImage("Show_Src",pImg);

 //cvWaitKey();
 pContourImg=cvCreateImage(
    cvGetSize(pImg),
    IPL_DEPTH_8U,
    3);
 //复制pImg,并把它转还为灰度图
 cvCvtColor(pImg,pContourImg,CV_GRAY2BGR);

 //执行查找边缘操作
 cvFindContours(
  pImg,
  storage,
  &contour,
  sizeof(CvContour),
  mode,
  CV_CHAIN_APPROX_SIMPLE,
  cvPoint(2,2));

 //在pContourImg上画出边界
 cvDrawContours(pContourImg,
       contour,
       CV_RGB(0,0,255),
       CV_RGB(255,0,0),
       2,
       2,
       8
       );

 //显示查找结果
 cvNamedWindow("Show_Dst",CV_WINDOW_AUTOSIZE);
 cvShowImage("Show_Dst",pContourImg);

 cvWaitKey();

 //释放资源
 cvReleaseImage(&pImg);
 cvReleaseImage(&pContourImg);
 cvDestroyWindow("Show_Src");
 cvDestroyWindow("Show_Dst");

}