关闭

OpenCV 霍夫变换

标签: opencv霍夫变换
331人阅读 评论(0) 收藏 举报
分类:

一. 实验内容

用OpenCV的霍夫变换来检测图片中的直线和圆。

二. 实验代码

//霍夫变换
class Task18 {
public:
    void deal() {
        Mat src_img = imread("img\\4.jpg");

        imshow("霍夫变换[原图]", src_img);

        Mat gray_img;
        cvtColor(src_img, gray_img, COLOR_BGR2GRAY);

        Mat mid_img;
        Canny(gray_img, mid_img, 50, 200, 3);
        imshow("边缘检测", mid_img);

        vector<Vec2f> lines1;

        HoughLines(mid_img, lines1, 1, CV_PI / 180, 150, 0, 0);

        Mat out1;
        out1.create(gray_img.size(), gray_img.type());
        for (int i = 0; i < lines1.size(); ++i) {
            double rho = lines1[i][0], theta = lines1[i][1];
            Point p1, p2;
            double a = cos(theta), b = sin(theta);
            double x0 = a * rho, y0 = b * rho;
            p1.x = cvRound(x0 + 1000 * (-b));
            p1.y = cvRound(y0 + 1000 * a);
            p2.x = cvRound(x0 - 1000 * (-b));
            p2.y = cvRound(y0 - 1000 * a);
            line(out1, p1, p2, 255, 1, LINE_AA);
        }

        imshow("霍夫变换[效果图1]", out1);

        vector<Vec4i> lines2;
        Mat out2;
        out2.create(gray_img.size(), gray_img.type());
        HoughLinesP(mid_img, lines2, 1, CV_PI / 180, 80, 50, 10);
        for (int i = 0; i < lines2.size(); ++i) {
            Vec4i l = lines2[i];
            line(out2, Point(l[0], l[1]), Point(l[2], l[3]), 255, 1, LINE_AA);
        }
        imshow("霍夫变换[效果图2]", out2);

        Mat src_img2 = imread("img\\5.jpg");
        imshow("霍夫圆变换[原图]", src_img2);
        Mat gray_img2;
        cvtColor(src_img2, gray_img2, COLOR_BGR2GRAY);
        GaussianBlur(gray_img2, gray_img2, Size(3, 3), 2, 2);

        vector<Vec3f> circles;
        HoughCircles(gray_img2, circles, HOUGH_GRADIENT, 1.5, 10, 200, 100, 0, 0);

        Mat out3;
        out3.create(gray_img2.size(), gray_img2.type());
        for (int i = 0; i < circles.size(); ++i) {
            Point center(cvRound(circles[i][0]), cvRound(circles[i][1]));
            int radius = cvRound(circles[i][2]);
            circle(out3, center, radius, 255, 3, 8, 0);
        }
        imshow("霍夫圆变换[效果图]", out3);

        waitKey(0);
    }
};

三. 实验结果

这里写图片描述

0
0
查看评论

OpenCV2学习笔记(八):使用霍夫变换检测直线和圆

在研究一幅图像时,常常会遇到一些平面或线性问题,直线在图像中频繁可见。这些富有意义的特征在物体识别等图像处理过程中扮演着重要的角色。本节主要记录一种经典的检测直线算法——霍夫变换(Hough Transform),用Hough变换检测图像中的直线和圆。
  • liyuefeilong
  • liyuefeilong
  • 2015-03-03 15:59
  • 5067

霍夫变换原理及opencv实现

霍夫变换简介霍夫变换(Hough Transform) 霍夫变换是图像处理中从图像中识别几何形状的基本方法之一,应用很广泛,也有很多改进算法。主要用来从图像中分离出具有某种相同特征的几何形状(如,直线,圆等)。最基本的霍夫变换是从黑白图像中检测直线(线段)。———百度百科霍夫变换检测直线原理简单来说...
  • weixiao2015
  • weixiao2015
  • 2016-07-05 15:19
  • 657

OpenCV使用霍夫变换检测图像中的形状

霍夫变换是一种被广泛使用的利用数学等式的参数形式在图像中检测形状的技术。 例如直线、椭圆、圆等形状。霍夫变换可以检测任何能以参数形式表示的形状,随着形状的复杂(维数的增加,例如球体),计算的消耗也会增加。 我们通常考虑简单的霍夫形状,例如直线和圆。霍夫直线效果图步骤 将图像置灰 调用Imgpro...
  • q4878802
  • q4878802
  • 2016-08-22 11:20
  • 2525

OpenCV-霍夫变换

OpenCV-霍夫变换author@jason_ql http://blog.csdn.net/lql0716/ 标准霍夫变换(Standard Hough Transform, SHT) 多尺度霍夫变换(Multi—Scale Hough Transform, MSHT) 累计概率霍夫变换(Pr...
  • lql0716
  • lql0716
  • 2017-04-30 22:09
  • 513

基于OpenCV实现霍夫变换

霍夫变换概述霍夫变换(Hough Transform)是图像处理中的一种特征提取技术,该过程在一个参数空间中通过计算累计结果的局部最大值得到一个符合该特征的集合作为霍夫变换的结果。霍夫线检测霍夫线变换是一种寻找直线的方法,在寻找霍夫变换之前,要对图像进行边缘检测,即霍夫线的输入为二值图像。原理其意思...
  • taoyanqi8932
  • taoyanqi8932
  • 2016-12-07 15:48
  • 2387

Opencv学习笔记-----霍夫变换直线检测及原理理解

霍夫变换(Hough Transform)是图像处理中的一种特征提取技术,它通过一种投票算法检测具有特定形状的物体。该过程在一个参数空间中通过计算累计结果的局部最大值得到一个符合该特定形状的集合作为霍夫变换结果。霍夫变换于1962年由Paul Hough 首次提出[53],后于1972年由Rich...
  • ycj9090900
  • ycj9090900
  • 2016-10-27 12:33
  • 9561

opencv霍夫变换源码及注释

终于鼓起勇气看hough变换源码了,  之前自己还瞎写了一个检测椭圆中心的 =_=! static void HoughLinesStandard( const Mat& img, float rho, float theta,        ...
  • traumland
  • traumland
  • 2016-05-06 16:51
  • 2555

OpenCV之霍夫变换

转自:http://blog.csdn.net/poem_qianmo/article/details/26977557?utm_source=tuicool&utm_medium=referral 本篇文章中,我们一起探讨了OpenCV中霍夫变换相关的知识点,以及了解了OpenCV中实现...
  • RedskyDeng
  • RedskyDeng
  • 2016-03-29 10:35
  • 1853

霍夫变换检测直线的公式推导以及基于opencv的源代码分析并实例实现

参考: http://blog.csdn.net/jia20003/article/details/7724530 http://blog.csdn.net/viewcode/article/details/8090932 http://blog.sina.com.cn/s/blog_60b330b...
  • piaoxuezhong
  • piaoxuezhong
  • 2017-03-07 11:18
  • 2149

【OpenCV】图像变换(四-1)-霍夫变换线段检测

霍夫变换是一种在图像中寻找直线、圆及其他形状的方法。原始的霍夫变化是一种直线变换,即在二值图像中寻找直线的一种相对快速方法,变换可以推广到其他普通的情况,而不仅仅是简单的直线。在这篇博文中,我们先对霍夫变换的线段检测讨论下。(1)霍夫变换的线段检测理论如下图所示,在直角坐标系中有一条直线l,原点到该...
  • w12345_ww
  • w12345_ww
  • 2015-04-26 20:24
  • 1874
    个人资料
    • 访问:156888次
    • 积分:3614
    • 等级:
    • 排名:第10768名
    • 原创:213篇
    • 转载:3篇
    • 译文:0篇
    • 评论:43条
    最新评论