Verybot之OpenCV应用二:霍夫变换查找圆
2014-01-18 22:29
225 查看
其实我是想通过这个程序来测试一下,OpenCV在Verybot上跑得怎么样,霍夫变换的原理就不多说了,下面是程序:
程序比较简单,cvHoughCircles就是查找圆所使用的函数,后面的这几个参数比较重要,需要根据实际情况进行调整,调整不好的话,会误检测出圆来。
测试的效果感觉还是不错的,下面是一个检测的录像:
http://v.youku.com/v_show/id_XNjYxNjkzNDMy.html
#include "cv.h" #include "highgui.h" #include "stdio.h" int main(int argc, char** argv) { cvNamedWindow("vedio",0); CvCapture* capture; if(1 == argc) { capture = cvCreateCameraCapture(0); } else { capture = cvCreateCameraCapture(atoi(argv[1])); } assert(NULL != capture); cvSetCaptureProperty(capture, CV_CAP_PROP_FRAME_WIDTH, 320); cvSetCaptureProperty(capture, CV_CAP_PROP_FRAME_HEIGHT,240); IplImage* frame; char keyCode; frame = cvQueryFrame(capture); if(!frame) { return 0; } IplImage* gray = cvCreateImage( cvGetSize(frame), 8, 1 ); //创建一个Image用来存灰度的图像 CvMemStorage* storage = cvCreateMemStorage(0); while((keyCode = cvWaitKey(15))) { if(keyCode == 'q') { break; } frame = cvQueryFrame(capture); if(!frame) { break; } cvCvtColor( frame, gray, CV_BGR2GRAY ); CvSeq* circles = cvHoughCircles( gray, storage, CV_HOUGH_GRADIENT, 2, gray->height/4,200,200,20 ); //霍夫变换查找圆 int i=0; for( i = 0; i < circles->total; i++ ) //将找到的圆标识出来 { float* p = (float*)cvGetSeqElem( circles, i ); cvCircle( frame, cvPoint(cvRound(p[0]),cvRound(p[1])), cvRound(p[2]), CV_RGB(255,0,0),3); printf("%d ,%d ,%d\n",cvRound(p[0]),cvRound(p[1]),cvRound(p[2])); } cvShowImage("vedio",frame); } cvReleaseImage(&frame); cvDestroyAllWindows(); return 0; }
程序比较简单,cvHoughCircles就是查找圆所使用的函数,后面的这几个参数比较重要,需要根据实际情况进行调整,调整不好的话,会误检测出圆来。
测试的效果感觉还是不错的,下面是一个检测的录像:
http://v.youku.com/v_show/id_XNjYxNjkzNDMy.html
相关文章推荐
- 【OpenCV学习笔记】二十、霍夫变换及应用
- 有关opencv的学习(22)—霍夫变换及应用
- Verybot之OpenCV应用三:色标跟踪
- Verybot之OpenCV应用一:安装与图像采集测试
- OpenCV2应用Meanshift查找相似物体
- Opencv距离变换distanceTransform应用——细化字符轮廓&&查找物体质心
- opencv(17)---霍夫变换以及应用
- Opencv距离变换distanceTransform应用——细化字符轮廓&&查找物体质心
- OpenCV在明暗不同或光线不均的图片上查找轮廓-应用在Android NDK
- 目标跟踪之camshift---opencv中meanshift和camshift例子的应用
- Hash算法系列-应用(查找)
- opencv3累计概率霍夫变换-HoughLinesP函数
- 【opencv+python】图像处理之二、几何变换(仿射与投影)的应用
- opencv3矩的计算-在图像中的应用-滚动条
- opencv的轮廓高级应用
- 使用opencv查找两张图片不同的部分
- OpenCV应用笔记】(彩色/灰度)图像像素值读取并保存到txt文件
- 【OpenCV入门教程之十四】OpenCV霍夫变换:霍夫线变换,霍夫圆变换合辑
- 异或运算及其应用-查找奇数个数的数字
- JAVA应用JNI调用OpenCV实现人脸检测(1)