opencv寻找轮廓
opencv寻找轮廓例子:运行环境:vc++ 6.0
#include "cv.h"
#include "highgui.h"
IplImage* src;
IplImage* img;
IplImage* dst;
CvMemStorage* storage=NULL;
int thresh=50;
void on_trackbar(int pos)
{
CvSeq* contour=0;
if(storage==NULL)
{
dst=cvCreateImage(cvGetSize(src),8,3);
storage=cvCreateMemStorage(0);
}
else
{
cvClearMemStorage(storage);
}
cvSmooth(src,src,CV_GAUSSIAN,3,3,0,0);
cvThreshold( src,img,thresh,200,CV_THRESH_BINARY);
cvNamedWindow( "threshold",1);
cvShowImage( "threshold", img );
cvFindContours(img,storage,&contour,sizeof(CvContour),CV_RETR_CCOMP,CV_CHAIN_APPROX_NONE,cvPoint(0,0));
cvZero( dst );
//cvDrawContours(dst,contour,CV_RGB(255,0,0),CV_RGB(0,255,0),-1,1,CV_AA,cvPoint(0,0));
for( ; contour; contour = contour->h_next )
{
CvRect rect=cvBoundingRect(contour,1);
CvPoint pt1=cvPoint(rect.x,rect.y),
pt2=cvPoint(rect.x+rect.width,rect.y+rect.height);
cvRectangle(dst,pt1,pt2,CV_RGB(255,0,0),1,CV_AA,0);
cvLine(dst,pt1,pt2,CV_RGB(0,255,0),1,CV_AA,0);
pt1=cvPoint(rect.x,rect.y+rect.height),
pt2=cvPoint(rect.x+rect.width,rect.y);
cvLine(dst,pt1,pt2,CV_RGB(0,255,0),1,CV_AA,0);
}
cvShowImage( "Components", dst );
}
int main( int argc, char** argv )
{
if(argc==2&&(src=cvLoadImage(argv,0))!=0)
{
img=cvCreateImage(cvGetSize(src),8,1);
cvNamedWindow( "Source",1);
cvShowImage( "Source", src );
cvNamedWindow( "Components",1);
cvCreateTrackbar("Threshold","Components",&thresh,200,on_trackbar);
on_trackbar(0);
cvWaitKey(0);
cvDestroyWindow( "sorce" );
cvDestroyWindow( "threshold" );
cvDestroyWindow( "Components" );
cvReleaseImage( &src);
cvReleaseImage( &img );
cvReleaseImage(&dst);
cvReleaseMemStorage(&storage);
}
}
原图:
http://cache.amobbs.com/bbs_upload782111/files_47/ourdev_690350WXJE5D.JPG
原图片 (原文件名:5.JPG)
阈值处理后的图像:
http://cache.amobbs.com/bbs_upload782111/files_47/ourdev_690351J8S67C.JPG
阈值处理后的图片 (原文件名:4.JPG)
找到轮廓的图像:
http://cache.amobbs.com/bbs_upload782111/files_47/ourdev_690352H5URKW.JPG
检测出轮廓图片 (原文件名:3.JPG) 回复【楼主位】mingyitao2052
-----------------------------------------------------------------------
不错,好例子 非常感谢,最近正在学习这方面的东西,很有帮助! 很好,mark marking,非常感谢 mark opencv 4 Contours 多谢分享! mark,正在学习 楼主位是1.0版的OpenCV吧,3.0版的OpenCV都已经推出了,更多C++特性。。。。 学习中,mark
页:
[1]