霍夫变换圆,直线检测[微记]

霍夫变换圆,直线检测[微记]

大家一起用,省的麻烦!
霍夫变换检测圆

    cv::Mat img = cv::imread("1.PNG", CV_LOAD_IMAGE_GRAYSCALE); 
    cv::Laplacian(img, img, CV_8UC1, 5); 
    cv::threshold(img, img, 254, 255, CV_THRESH_BINARY); 
    cv::imwrite("edge.png", img); 
    cv::Mat dst = cv::imread("edge.png"); 
    std::vector<cv::Vec3f> circles;
    HoughCircles(img, circles, CV_HOUGH_GRADIENT, 1.2, 10, 130, 38, 6, 50);
    //image                 为输入图像,要求是灰度图像

    //circles               为输出圆向量——圆心横坐标,圆心纵坐标和圆半径

    //method                为使用霍夫变换圆检测的算法,它的参数是CV_HOUGH_GRADIENT

    //dp                    为第一阶段所使用的霍夫空间的分辨率,dp=1时表示霍夫空间与输入图像空间的大小一致,
    //                      dp=2时霍夫空间是输入图像空间的一半,以此类推

    //minDist               为圆心之间的最小距离

    //param1                Canny算子的高阈值

    //param2                共有的阈值

    //minRadius和maxRadius   圆半径的最小值和最大值
    for(size_t i = 0; i < circles.size(); i++)
    {
        cv::Point center(cvRound(circles[i][0]), cvRound(circles[i][1]));
        int radius = cvRound(circles[i][2]);

        circle( dst, center, 0, cv::Scalar(0, 255, 0), -1, 8, 0 );
        circle( dst, center, radius, cv::Scalar(0, 0, 255), 1, 8, 0 );  
    }

    cv::imshow("circles", dst);
    cv::waitKey(0); 

霍夫变换检测线段

    cv::Mat img = cv::imread("1.PNG", CV_LOAD_IMAGE_GRAYSCALE); 
    cv::Laplacian(img, img, CV_8UC1, 5); 
    cv::threshold(img, img, 254, 255, CV_THRESH_BINARY); 
    cv::imwrite("edge.png", img); 
    cv::Mat dst = cv::imread("edge.png"); 
    std::vector<cv::Vec4i> lines;
    HoughLinesP(img, lines, 30, 2.0 * M_PI / 180.0, 20, 20.0, 3.0); 
    //lines:是一个vector<Vec4i>,Vec4i是一个包含4个int数据类型的结构体,[x1,y1,x2,y2],可以表示一个线段。

    //rho:就是一个半径的分辨率。

    //theta:角度分辨率。

    //threshold:判断直线点数的阈值。

    //minLineLength:线段长度阈值。

    //minLineGap:线段上最近两点之间的阈值。
    for(size_t i = 0; i < lines.size(); i++)
    {
        cv::Point p1(lines[i][0], lines[i][1]);
        cv::Point p2(lines[i][2], lines[i][3]);
        cv::line(dst, p1, p2, cv::Scalar(255, 255, 0), 2); 
    }
    cv::imshow("lines", dst); 
    cv::waitKey(0); 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值