ios--OpenCV--检测直线、圆、矩形

直线检测:

    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)表示用红色描线



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值