opencv 从摄像头读取检测直线(霍夫变化)
2011-07-02 15:47
274 查看
//需要的库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 * lines=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);//边缘检测 lines=cvHoughLines2(edge_Img,storage,CV_HOUGH_STANDARD,1,CV_PI/180,150); //------------------------------------------------------------------ // 对于其中的一帧 //------------------------------------------------------------------ if(lines->total != 0)//检测到直线 { printf("下面输出直线的一些位置\t\t线条数%d\n",lines->total/2); for (int i=0;i<MIN(lines->total,100);i++) { if(i%2 == 0) printf("下面输出线条%d的一些信息\n",i/2+1); float *line=(float *)cvGetSeqElem(lines,i);//lines是需要检测的序列,i是元素在序列中的索引 float rho =line[0]; float theta=line[1]; printf("rho:%f,theta:%f\t",rho,theta);//注意坐标系采用图像坐标系,坐标原点在左上角 double a=cos(theta),b=sin(theta); double x0=a*rho,y0=b*rho; CvPoint pt1,pt2; pt1.x=cvRound(x0 + 500*(-b)); pt1.y=cvRound(y0 + 500*(a)); pt2.x=cvRound(x0 - 500*(-b)); pt2.y=cvRound(y0 - 500*(a)); cvLine(src_Img,pt1,pt2,CV_RGB(255,0,0),1,CV_AA,0); printf("%f,%f\n",x0,y0);//如果点不在图像内,那么选在这条直线上离这个点最近的点开始画 } cvShowImage("video", src_Img); //延时 ,不然不会显示图像的,应该是扫描太快了 cvWaitKey(10); //不然会因为太快导致显示还没完九需要去显示下一帧,因此会显示nothing } else//检测不到直线 printf("图像中没有直线"); //------------------------------------------------------------------ // 执行以上的判断检测识别 //------------------------------------------------------------------ } //释放图像 cvReleaseImage(&src_Img); cvReleaseImage(&edge_Img); cvReleaseImage(&temp_Img); //销毁窗口 cvDestroyWindow("video"); //释放摄像设备 cvReleaseCapture(&pCapture); return 0; }
相关文章推荐
- opencv 从摄像头读取检测圆(霍夫变化)
- opencv霍夫变化检测直线和圆
- 霍夫变换直线检测houghlines及opencv的实现分析
- opencv 霍夫变换检测直线
- opencv从摄像头读取视频并实时进行人脸检测代码
- opencv 霍夫变换检测直线
- 基于OpenCV读取摄像头进行人脸检测和人脸识别
- 【OpenCV笔记 13】OpenCV中Hough霍夫直线检测和同一窗口显示多幅图片
- OpenCV学习18--霍夫变换检测直线
- 基于OpenCV读取摄像头进行人脸检测和人脸识别
- opencv 霍夫变换检测直线中pt1、pt2点的确定
- opencv 霍夫变换检测直线(转)
- 霍夫直线检测及opencv的实现分析
- 基于OpenCV读取摄像头进行人脸检测和人脸识别
- 基于OpenCV读取摄像头进行人脸检测和人脸识别
- OpenCV实现读取摄像头做实时边缘检测
- Opencv中 霍夫线变换检测直线中pt1、pt2点的确定
- opencv 霍夫变换检测直线中pt1、pt2点的确定
- android openCV检测图像的基本特征,包括Canny边缘检测、Harris角点检测、霍夫直线检测-基于Android studio
- opencv 霍夫变换检测直线 例程中的1000