OpenCv 中Snake程序的例子

#include "cv.h" #include "highgui.h" #include <iostream> #include <vector> #pragma comment(lib,"highgui.lib") #pragma comment(lib,"cv.lib") #pragma comment(lib,"cvaux.lib") #pragma comment(lib,"cxcore.lib") std::vector<CvPoint> InitContour; IplImage* temp; //= cvCreateImage(cvGetSize(img), IPL_DEPTH_8U, 1); void showContent(IplImage * img) { if(temp==NULL) temp= cvCreateImage(cvGetSize(img), IPL_DEPTH_8U, 1); cvCopyImage(img,temp); for (int i=0;i<InitContour.size();i++) { cvCircle(temp, InitContour[i], 2, cvScalarAll(155)); if(i>0) cvLine( temp, InitContour[i-1],InitContour[i] , cvScalarAll(100), 1); } cvShowImage( "srcImage", temp ); } void on_mouse( int event, int x, int y, int flags, void* ptr) { if( event == CV_EVENT_LBUTTONDOWN ) { InitContour.push_back(cvPoint(x,y)); showContent((IplImage *)ptr); } } int _tmain(int argc, _TCHAR* argv[]) { IplImage * srcimage = NULL; if ( argc == 2 && (srcimage = cvLoadImage((char *)argv[1], CV_LOAD_IMAGE_GRAYSCALE))!=0 ); else { srcimage = cvLoadImage("source01(7).jpg", CV_LOAD_IMAGE_GRAYSCALE); //载入工作目录下文件名为“tiger.jpg”的图片。 } if(srcimage==NULL) { std::cout<<"error file name"<<std::endl; return -1; } InitContour.clear(); cvNamedWindow("srcImage"); cvShowImage("srcImage", srcimage); cvSetMouseCallback("srcImage", on_mouse,srcimage); char c; while(char c = cvWaitKey(0)) if( c == 's'||c == 'S' ) break; float alpha=1.0; float beta=0.5; float gamma=1.0; CvSize size; size.width=3; size.height=3; CvTermCriteria criteria; criteria.type=CV_TERMCRIT_ITER; criteria.max_iter=500; criteria.epsilon=0.1; int itetime =100; for(int ite=0;ite<itetime;ite++) { CvPoint* pts = new CvPoint[InitContour.size()]; for (int i=0;i<InitContour.size();i++) { pts[i] = InitContour[i]; } cvSnakeImage( srcimage, pts,InitContour.size(),α,β,γ,CV_VALUE,size,criteria,1); int size = InitContour.size(); InitContour.clear(); for (int i=0;i<size;i++) { InitContour.push_back(pts[i]); int next = (i+1)%size; CvPoint ne = pts[next]; if(size<100) { CvPoint mid = cvPoint((pts[i].x+ne.x)/2,(pts[i].y+ne.y)/2); InitContour.push_back(mid); } } delete []pts; showContent(srcimage); cvWaitKey(); } showContent(srcimage); cvWaitKey(); return 0; }

分割结果如下!

OpenCv 中Snake程序的例子_第1张图片

你可能感兴趣的:(image,File,null,delete,include,float)