zoukankan      html  css  js  c++  java
  • 霍夫直线变换

    霍夫直线变换主要用于直线特征的检测,其主要思想如下

    1.将图形中的点从空域坐标(x,y)转化为极坐标 x=ρcosθ,y=ρsinθ,R2=(ρcosθ)2+(ρsinθ)2

    2.对极坐标进行变换,转化为θ与R的关系

      R2=R2cos2θ+R2sin2θ

      R=Rcos2θ+Rsin2θ

      R=xcosθ+ysinθ,将xy看成定值,该公式表达R与θ的关系,可以在坐标系中用曲线表示,横坐标为θ,纵坐标为R

    3.检测多个R-θ曲线的交点

    为什么找交点?

     以上图为例,如果右边两个区线相交,表示不同的点(x1,y1),(x2,y2)具有相同的θ和R,也就是说我们检测的这两个点在极坐标表示中是处于同一条直线上的,对于要检测的直线,如果它上面的点画出的曲线都可以相交于一点,那么说明他是一条直线

    示例代码

    #include<iostream>
    #include<opencv2/opencv.hpp>
    
    using namespace std;
    using namespace cv;
    
    int main(int argc, char** argv)
    {
        Mat src, src_gray, dst;
        src = imread("1.jpg");
        if (!src.data)
        {
            printf("load img error
    ");
            return -1;
        }
    
        char INPUT_TITLE[] = "Input img";
        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, 20);
        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);
        }
    
        imshow(OUTPUT_TITLE, dst);
        waitKey(0);
        return 0;
    }

    先进行灰度转化,然后将检测结果颜色设为红色,以向量形式存放

    HoughLinesP就是opencv中的霍夫直线变换api前两个是输入输出,1表示极坐标生成时扫描像素的步长,∏/180是横坐标取点的频率,第一个10表示最少重合点个数,第二个10表示两点间隔最大距离

    结果如图

  • 相关阅读:
    好文转载—做到更好之前,你需要做得好
    Java中UUID的实现
    利用jQuery UI制作包含文本内容的slider
    JavaScript的陷阱 By 三七
    举例解读云计算三种服务模式SaaS、PaaS和IaaS及其之间关系
    用户管理系统接口文档
    PL/SQL 中文乱码解决方案
    百万级PHP网站架构工具箱
    双缓冲方法解决屏幕刷新闪烁的问题
    JavaScript绘图
  • 原文地址:https://www.cnblogs.com/wangtianning1223/p/13239328.html
Copyright © 2011-2022 走看看