打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
OpenCV画轮廓的外界圆矩形椭圆等
userphoto

2013.12.29

关注

OpenCV画轮廓的外界圆矩形椭圆等

分类: OpenCV 996人阅读 评论(0) 收藏 举报
  1. #include <cv.h>      
  2. #include <cxcore.h>      
  3. #include <highgui.h>      
  4. #include <iostream>      
  5. using namespace std;   
  6. #pragma   comment(lib,"cv.lib")     
  7. #pragma   comment(lib,"highgui.lib")     
  8. #pragma   comment(lib,"cxcore.lib")      
  9.     
  10. int main()    
  11. {    
  12.     IplImage *src = cvLoadImage("D:\\三值canny的图.bmp",0);  
  13. //IplImage *src = cvLoadImage("D:\\BoardStereoL3.jpg",0);   
  14.     CvMemStorage *storage = cvCreateMemStorage(); //创建一个内存区域,该区域是额可以动态增长的    
  15.     CvSeq *seq = NULL;  //定义一个序列,这些序列可以存放在上面的内存区域里   
  16.     int cnt = cvFindContours(src,storage,&seq,sizeof(CvContour),2);// // //默认:mode=CV_RETR_LIST,检索所偶轮廓   
  17.     seq = seq->v_next;    
  18. int c=seq->total;//当前轮廓包含多少个元素,这里的元素为点   
  19.     double length = cvArcLength(seq); //得到指定的那个轮廓的周长   
  20. //该函数有3个参数:序列,起点(默认计算整条曲线),是否封闭曲线   
  21.     double area = cvContourArea(seq);  //得到指定的那个轮廓的面积   
  22.     CvRect rect = cvBoundingRect(seq,1);  //根据序列,返回轮廓外围矩形;   
  23.     CvBox2D box = cvMinAreaRect2(seq,NULL); //最小外围矩形    
  24.         
  25.     cout<<"Length = "<<length<<endl;    
  26.     cout<<"Area = "<<area<<endl;    
  27.       
  28. CvPoint pt1,pt2;  
  29. pt1.x=rect.x;  
  30. pt1.y=rect.y;  
  31. pt2.x=rect.x+rect.width;  
  32. pt2.y=rect.y+rect.height;  
  33.   
  34.   
  35.   
  36.     IplImage *dst = cvCreateImage(cvGetSize(src),8,3); //目标图像为3通道图   
  37. cvZero(dst);    
  38.     cvDrawContours(dst,seq,CV_RGB(255,0,0),CV_RGB(255,0,0),0);    
  39.     cvRectangle(dst,pt1,pt2,CV_RGB(0,255,0));   
  40. cvNamedWindow("dst",1);  
  41.     cvShowImage("dst",dst);    
  42.     cvWaitKey();    
  43.     
  44.     CvPoint2D32f center;    
  45.     float radius;    
  46.   int a=  cvMinEnclosingCircle(seq,¢er,&radius); //根据序列画出最小面积外接圆   
  47.   
  48.   
  49.   cout<<"center.x = "<<center.x<<endl;    
  50.   cout<<"center.y = "<<center.y<<endl;   
  51.     cout<<"radius = "<<radius<<endl;   
  52.   //圆必须是包含所有点,成功返回1,并且得到圆心和半径   
  53.   
  54.   
  55.   cvCircle(dst,cvPointFrom32f(center),cvRound(radius),CV_RGB(100,100,100));    
  56.     cvShowImage("dst",dst);    
  57.     cvWaitKey();    
  58.     
  59.     CvBox2D ellipse = cvFitEllipse2(seq);//最小二乘法的椭圆拟合     
  60.     cvEllipseBox(dst,ellipse,CV_RGB(255,255,0)); //在图上画椭圆    
  61.     cvShowImage("dst",dst);    
  62.     cvWaitKey();    
  63.     
  64.     //绘制外接最小矩形      
  65.     CvPoint2D32f pt[4];    
  66.     cvBoxPoints(box,pt);    
  67.     for(int i = 0;i<4;++i){    
  68.         cvLine(dst,cvPointFrom32f(pt[i]),cvPointFrom32f(pt[((i+1)%4)?(i+1):0]),CV_RGB(0,0,255));    
  69.     }    
  70.     cvShowImage("dst",dst);    
  71.     cvWaitKey();    
  72.     
  73.     cvReleaseImage(&src);    
  74.     cvReleaseImage(&dst);    
  75.     cvReleaseMemStorage(&storage);      
  76. }    

更多 0
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【转】OpenCV计算连通区域数目与最大连通区域并标示出
OpenCv的连通域操作
cvCreateStructuringElementEx
opencv 轮廓的长度,面积,外接矩形(平行坐标轴),处接最小矩形,处接圆 , 椭圆
CxImage转换成IplImage
opencv 画矩形
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服