ios--OpenCV--检测直线、圆、矩形
2014-04-15 11:38
501 查看
直线检测:
圆检测:
画矩形框:
cvRectangle(srcResult, mincvPoint, maxcvPoint, cvScalar(0,0,255));
//srcResult表示目标图片
//mincvPoint表示矩形左上角的点cvPoint
//maxcvPoint表示矩形右下角的点cvPoint
//cvScalar(0,0,255)表示用红色描线
IplImage * src_Img= srcIpl1; IplImage * edge_Img=NULL; edge_Img=cvCreateImage(cvGetSize(src_Img),IPL_DEPTH_8U,1); IplImage *temp_Img=cvCreateImage(cvGetSize(src_Img),IPL_DEPTH_8U,1); cvCvtColor(src_Img,temp_Img,CV_BGR2GRAY); cvCanny(temp_Img,edge_Img,25,50);//threshold1和threshold2 当中的小阈值用来控制边缘连接,大的阈值用来控制强边缘的初始分割。 //hough变化直线检测 CvMemStorage *storage=cvCreateMemStorage(0);//内存采用默认大小 CvSeq * lines=0; lines=cvHoughLines2(edge_Img,storage,CV_HOUGH_STANDARD,1,CV_PI/180,150); for (int i=0;i<MIN(lines->total,100);i++) { float *line=(float *)cvGetSeqElem(lines,i); float rho =line[0]; float theta=line[1]; //cout<<"rho:"<<rho<<",theta:"<<theta<<endl;//注意坐标系采用图像坐标系,坐标原点在左上角 CvPoint pt1,pt2; double a=cos(theta),b=sin(theta); double x0=a*rho,y0=b*rho; 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); //cout<<x0<<","<<y0<<endl;//如果点不在图像内,那么选在这条直线上离这个点最近的点开始画 }
圆检测:
IplImage * src_Img= srcIpl1; IplImage * edge_Img=NULL; edge_Img=cvCreateImage(cvGetSize(src_Img),IPL_DEPTH_8U,1); IplImage *temp_Img=cvCreateImage(cvGetSize(src_Img),IPL_DEPTH_8U,1); cvCvtColor(src_Img,temp_Img,CV_BGR2GRAY); CvMemStorage *storage=cvCreateMemStorage(0);//内存采用默认大小 CvSeq* circles = cvHoughCircles( temp_Img, storage, CV_HOUGH_GRADIENT, 2, temp_Img->height/4, 80, 40 ); for(int i = 0; i < circles->total; i++ ) { float* p = (float*)cvGetSeqElem( circles, i); cvCircle( src_Img, cvPoint(cvRound(p[0]),cvRound(p[1])), 3, CV_RGB(0,255,0), -1, 8, 0 ); cvCircle( src_Img, cvPoint(cvRound(p[0]),cvRound(p[1])), cvRound(p[2]), CV_RGB(255,0,0), 3, 8, 0 ); }
画矩形框:
cvRectangle(srcResult, mincvPoint, maxcvPoint, cvScalar(0,0,255));
//srcResult表示目标图片
//mincvPoint表示矩形左上角的点cvPoint
//maxcvPoint表示矩形右下角的点cvPoint
//cvScalar(0,0,255)表示用红色描线
相关文章推荐
- 使用opencv,在iOS环境下检测边角点,然后画出最大矩形
- OpenCV--- 检测直线、圆、矩形
- opencv --检测直线、圆、矩形
- opencv 检测直线、线段、圆、矩形
- opencv检测直线,圆,矩形
- opencv 检测直线、圆、矩形
- opencv 检测直线、圆、矩形
- opencv 检测直线、圆、矩形
- opencv 检测直线、线段、圆、矩形
- opencv 检测直线、圆、矩形
- opencv 检测直线、线段、圆、矩形
- 【OpenCV】opencv 检测直线、圆、矩形
- 基于opencv的肤色检测,并将肤色区域用矩形框标出。
- 【OpenCV3】几何图形(直线、矩形、圆、椭圆、多边形等)绘制
- OpenCV笔记11:霍夫变换检测直线
- IOS用CGContextRef画各种图形(文字、圆、直线、弧线、矩形、扇形、椭圆、三角形、圆角矩形、贝塞尔曲线、图片)
- opencv直线检测直线提取算法与总结
- OpenCV2编程手册笔记之 7.3使用霍夫变换检测直线
- IOS 中调用opencv进行人脸检测
- OpenCV-Python教程(9)(10)(11): 使用霍夫变换检测直线 直方图均衡化 轮廓检测