📄 5-3.cpp
字号:
//提取物体的轮廓 并画出轮廓
//
/*
#include "cv.h"
#include "cxcore.h"
#include "highgui.h"
#include "iostream.h"
void main( )
{
int i=0;
int mode = CV_RETR_CCOMP; //提取轮廓的模式
int contours_num=0; //图像中提取的轮廓的数目
CvScalar external_color ; //绘制轮廓线的颜色
CvScalar hole_color;
CvMemStorage * storage = cvCreateMemStorage(0); //提取轮廓时需要的存储容器
CvSeq * contour = 0; //存储提取轮廓的序列指针
IplImage* pImg = NULL;
IplImage* pContourImg = NULL; //显示提取的轮廓图像
IplImage* src=cvLoadImage("pic3.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,180,255,CV_THRESH_BINARY);//转为二值图(cvFindContours需要)
//-------------------cvFindContours查找物体轮廓-------------------------
mode = CV_RETR_LIST;
contours_num=cvFindContours( pImg, storage, &contour, sizeof(CvContour),
mode, CV_CHAIN_APPROX_NONE);
cout<<contours_num<<" "<<endl; //找到的轮廓数目
//----------------------------将轮廓画出----------------------
for( ; contour != 0; contour = contour->h_next )
{
hole_color = CV_RGB( rand()&255, rand()&255, rand()&255 );
external_color = CV_RGB( rand()&255, rand()&255, rand()&255 );
cvDrawContours( pContourImg, contour, external_color, hole_color,1 , 2, 8 );
}
//----显示提取的轮廓的图像----
cvShowImage( "contour", pContourImg );
cvWaitKey(0);
//释放图像
cvReleaseImage( &src );
cvReleaseImage( &pImg );
cvReleaseImage( &pContourImg );
cvReleaseMemStorage(&storage);
}
//*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -