首页 > 其他 > 详细

霍夫变换直线检测

时间:2019-09-09 10:18:00      阅读:120      评论:0      收藏:0      [点我收藏+]

一、霍夫变换直线检测:

技术分享图片

1.众所周知, 一条直线在图像二维空间可由两个变量表示. 如:
      <1>在笛卡尔坐标系: 可由参数: 斜率和截距(m,b)表示。 
      <2>在极坐标系: 可由参数: 极径和极角(r, θ)表示。

 可以用极坐标系来表示直线. 因此, 直线的表达式可为:     

 

                       技术分享图片

 

 

 化简便可得到:

                     技术分享图片

 

 

 

技术分享图片

 

 技术分享图片

 

 技术分享图片技术分享图片

 

 

 

 

 

 技术分享图片

 

 

 技术分享图片

 

 

 有经验的人可以使用:

技术分享图片

 

 

 技术分享图片

 

 

 代码:

 

#include <opencv2/opencv.hpp>
#include <iostream>
#include <math.h>

using namespace cv;
using namespace std;

int main(int argc, char** argv) {
    Mat src, src_gray, dst;
    src = imread("L:/7.png");
    if (!src.data) {
        printf("could not load image...\n");
        return -1;
    }
    char INPUT_TITLE[] = "input image";
    char OUTPUT_TITLE[] = "hough-line-detection";
    namedWindow(INPUT_TITLE, CV_WINDOW_AUTOSIZE);
    namedWindow(OUTPUT_TITLE, CV_WINDOW_AUTOSIZE);
    imshow(INPUT_TITLE, src);

    Canny(src, src_gray, 100, 200);
    cvtColor(src_gray, dst, CV_GRAY2BGR);
    imshow("edge_image", src_gray);
     

    vector<Vec4f> plines;        //定义的一个数组
    HoughLinesP(src_gray, plines, 1, CV_PI / 180.0, 10, 0, 10);
    //
    Scalar color = Scalar(0, 0, 255);
    for (size_t i = 0; i < plines.size(); i++)
    {
        Vec4f hline = plines[i];
        line(dst, Point(hline[0], hline[1]), Point(hline[2], hline[3]), color, 3,LINE_AA );
        //Poinnt为起始点位置, 颜色,3为线条粗,LINE_AA为线条类型。
        /*  线条类型:
            LINE_8 (or 0) - 8-connected line(8邻接)连接 线。
             LINE_4 - 4-connected line(4邻接)连接线。
            LINE_AA - antialiased 线条。
        */

    }
    
    imshow(OUTPUT_TITLE, dst);
    waitKey(0);
    return 0;
}

 

实验结果:

输入                                       边缘检测                                 霍夫直线检测

技术分享图片

 

霍夫变换直线检测

原文:https://www.cnblogs.com/Jack-Elvis/p/11454127.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!