opencv识别圆的代码(转)

//圆形检测代码demo
//载入数张包含各种形状的图片,检测出其中的圆形

#include "cv.h"
#include "highgui.h"
#include <math.h>
#include <string.h>
#include <iostream>

int thresh = 50;
IplImage* img =NULL;
IplImage* img0 = NULL;
IplImage * pImg8u=NULL;

CvMemStorage* storage =NULL;
const char * wndname = "圆形检测  Demo";
char* names[] = { "aa.png","bb.png","pic8.png","pic7.png","pic3.png","pic9.png","pic10.png",    
"pic11.png","pic12.png","pic13.png","pic14.png",0};

void HoughCircle()
{

 CvSeq * circles=NULL;
 pImg8u=cvCreateImage(cvGetSize(img),8,1);
 CvMemStorage* storage = cvCreateMemStorage(0);
 cvCvtColor(img,pImg8u,CV_BGR2GRAY);
 //最好先cvSmooth一下,再调用cvHoughCircles
 cvSmooth(pImg8u,pImg8u,CV_GAUSSIAN,7,7);
 circles=cvHoughCircles(pImg8u,storage,CV_HOUGH_GRADIENT,
  2,   //最小分辨率,应当>=1
  pImg8u->height/4,   //该参数是让算法能明显区分的两个不同圆之间的最小距离
  140,   //用于Canny的边缘阀值上限,下限被置为上限的一半
  118,    //累加器的阀值
  2,  //最小圆半径 
  120  //最大圆半径
  );

 int k;
 for (k=0;k<circles->total;k++)
 {
  float *p=(float*)cvGetSeqElem(circles,k);
  //cvCircle( img, cvPoint(cvRound(p[0]),cvRound(p[1])), 3, CV_RGB(0,255,0), -1, 8, 0 );
  cvCircle(img,cvPoint(cvRound(p[0]),cvRound(p[1])),cvRound(p[2]),CV_RGB(0,0,0),3,CV_AA,0);
 }

 cvClearMemStorage( storage );

}

int main(int argc, char** argv)
{
 int i, c;
 // create memory storage that will contain all the dynamic data


 for( i = 0; names[i] != 0; i++ )
 {
  img0 = cvLoadImage( names[i], 1 );
  if( !img0 )
  {
   cout<<"不能载入"<<names[i]<<"继续下一张图片"<<endl;
   continue;
  }
  img = cvCloneImage( img0 );

  HoughCircle();
  cvNamedWindow( wndname, 1 );
  cvShowImage(wndname,img);

  c = cvWaitKey(0);

  cvReleaseImage( &img );
  cvReleaseImage( &img0 );
  cvReleaseImage(&pImg8u);


  if( (char)c == 27 )
   break;
 }

 cvDestroyWindow( wndname );
 return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值