opencv 从摄像头读取检测圆(霍夫变化)

来源:互联网 发布:centos 7.2 snmp 编辑:程序博客网 时间:2024/05/16 18:24
//需要的库cv210.lib cxcore210.lib highgui210.lib  cvcam.lib#include "cv.h"               #include "highgui.h"    #include <math.h>int main()    {    //读取摄像头    //声明IplImage指针    IplImage* src_Img = NULL; IplImage *edge_Img = NULL;IplImage *temp_Img = NULL;CvCapture* pCapture = cvCaptureFromCAM(-1); CvMemStorage *storage=cvCreateMemStorage(0);//0 表示内存采用默认大小CvSeq * cir=NULL;//窗口通过窗口名来标识    cvNamedWindow("video", CV_WINDOW_AUTOSIZE);       bool isInitialize = false ;while(src_Img = cvQueryFrame( pCapture ))    {      if(!isInitialize){edge_Img=cvCreateImage(cvGetSize(src_Img),IPL_DEPTH_8U,1);temp_Img=cvCreateImage(cvGetSize(src_Img),IPL_DEPTH_8U,1);isInitialize = true;}cvCvtColor(src_Img,temp_Img,CV_BGR2GRAY);//转为灰阶cvCanny(temp_Img,edge_Img,50,100);//边缘检测        cir=cvHoughCircles(temp_Img,storage,CV_HOUGH_GRADIENT,1,src_Img->width/10 ,80,40);//------------------------------------------------------------------//对于其中的一帧//------------------------------------------------------------------if(cir->total != 0){for (int i=0;i<MIN(cir->total,100);i++){float * p=(float *)cvGetSeqElem(cir,i);CvPoint pt=cvPoint(cvRound(p[0]),cvRound(p[1]));cvCircle(src_Img,pt,cvRound(p[2]),CV_RGB(0,255,0));printf("圆心:X:%d,Y:%d",pt.x,pt.y);printf("半径:%d",p[2]);} cvShowImage("video", src_Img);    //延时 ,不然不会显示图像的,应该是扫描太快了    cvWaitKey(10);  //不然会因为太快导致显示还没完九需要去显示下一帧,因此会显示nothing }else//检测不到直线printf("图像中没有直线");//------------------------------------------------------------------//执行以上的判断检测识别//------------------------------------------------------------------   }    //释放图像    cvReleaseImage(&src_Img);  cvReleaseImage(&edge_Img);cvReleaseImage(&temp_Img);//销毁窗口    cvDestroyWindow("video");    //释放摄像设备    cvReleaseCapture(&pCapture);    return 0;     }   

 
原创粉丝点击