【OpenCV学习笔记】【编程实例】五 (霍夫圆检测)
来源:互联网 发布:收购淘宝号可信吗 编辑:程序博客网 时间:2024/05/29 18:39
// GetCircle.cpp : 定义控制台应用程序的入口点。//圆形检测代码demo//载入数张包含各种形状的图片,检测出其中的圆形#include "cv.h"#include "highgui.h"#include <math.h>#include <string.h>#include <iostream>#include "windows.h" //程序运行时间对应的头文件using namespace std;int thresh = 50;IplImage* img =NULL;IplImage* img0 = NULL;IplImage * pImg8u=NULL;CvMemStorage* storage =NULL;const char * wndname = "圆形检测 Demo";char* names[] = { "1.bmp","2.bmp","3.bmp","4.bmp","5.bmp","48.bmp","pic10.png", "pic11.png","pic12.png","pic13.png","pic14.png",0};//char* names[] = { "5.bmp", 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,3,3); circles=cvHoughCircles(pImg8u,storage,CV_HOUGH_GRADIENT, 2, //最小分辨率,应当>=1 pImg8u->height/4, //该参数是让算法能明显区分的两个不同圆之间的最小距离 100, //用于Canny的边缘阀值上限,下限被置为上限的一半 40, //累加器 的阀值 2, //最小圆半径 27 //最大圆半径 ); int k; for (k=0;k<circles->total;k++) { float *p=(float*)cvGetSeqElem(circles,k); if((cvRound(p[2]))>9&&(cvRound(p[2]))<14) { cvCircle(img,cvPoint(cvRound(p[0]),cvRound(p[1])),cvRound(p[2]),CV_RGB(0,255,0),3,CV_AA,0); cout<<"圆心坐标"<<"("<<cvRound(p[0])<<","<<cvRound(p[1])<<")"<<endl; //输出圆心的X,Y坐标 cout<<"圆心半径"<<cvRound(p[2])<<endl; //输出圆的半径 } } 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 ); DWORD begin=0,end=0,cost; begin=GetTickCount(); HoughCircle(); end=GetTickCount(); cout<<"The run time is:"<<(end-begin)<<"ms!"<<endl;//输出运行时间 cvNamedWindow( wndname, 1 ); cvShowImage(wndname,img); c = cvWaitKey(0); cvReleaseImage( &img ); cvReleaseImage( &img0 ); cvReleaseImage(&pImg8u); if( (char)c == 27 ) break; } cvDestroyWindow( wndname ); return 0;}
问题提出:
在对图像进行分析的过程中,需要识别的对象总会具有一些自己独特的几个特征,比如说实际的项目中的魔方的每个色块都是正方形的,检测硬币是圆的,等等。这些都可以用到OpenCV中的霍夫圆,直线,矩形检测等检测方法。然后进行进一步的筛选就行得到需要的对象了。
代码下载:霍夫圆检测
相关博文:
OpenCV中如何剔除检测到的不符合要求的对象
openCV中 cvSeq的用法说明
0 0
- 【OpenCV学习笔记】【编程实例】五 (霍夫圆检测)
- 【OpenCV学习笔记】【编程实例】六 (霍夫圆检测续)
- 【OpenCV学习笔记】五、实例应用一
- Opencv学习笔记(五)Harris角点检测
- Opencv学习笔记(五)Harris角点检测
- Opencv学习笔记(五)Harris角点检测
- Opencv学习笔记(五)Harris角点检测
- Opencv学习笔记(五)Harris角点检测
- Opencv学习笔记(五)Harris角点检测
- Opencv学习笔记(五)Harris角点检测
- OpenCV入门笔记(五) 轮廓检测
- 新手学习opencv五:人脸检测
- opencv学习笔记(五)
- OpenCV学习笔记(五)
- OpenCV python学习笔记(五)
- OpenCV学习笔记五:直方图
- opencv学习笔记(五)
- OpenCV学习——运动检测实例
- 教你怎么从一台sql server服务器拷贝数据到另外一台sql server服务器
- 面向对象程序设计上机练习七(类和对象)
- Android——4.2 - 3G移植之路之usb-modeswitch (二)
- Ubuntu上面搭建ftp服务器
- 基于socket的android聊天工具简单实现
- 【OpenCV学习笔记】【编程实例】五 (霍夫圆检测)
- Ubuntu网络配置
- Django使用CSS静态文件
- 理解WebKit和Chromium: Chromium WebView和Chrome浏览器渲染机制
- 100ns周期200ns的正脉冲波形形状描述
- Express
- android深入浅出——02 Log
- IT忍者神龟之jquery zTree异步加载简单实例
- 很有深意的《白雪公主杀人事件》