霍夫直线变换介绍
Hough Line Transform用来做直线检测
前提条件 – 边缘检测已经完成
平面空间到极坐标空间转换

对于任意一条直线上的所有点来说,变换到极坐标中,从[0~360]空间,可以得到r的大小
属于同一条直线上点在极坐标空(r, theta)必然在一个点上有最强的信号出现,根据此反算到平面坐标中就可以得到直线上各点的像素坐标。从而得到直线.

标准的霍夫变换 cv::HoughLines从平面坐标转换到霍夫空间,最终输出是 表示极坐标空间

霍夫变换直线概率 cv::HoughLinesP最终输出是直线的两个点

  1. cv::HoughLines(
  2. InputArray src, // 输入图像,必须8-bit的灰度图像
  3. OutputArray lines, // 输出的极坐标来表示直线
  4. double rho, // 生成极坐标时候的像素扫描步长
  5. double theta, // 生成极坐标时候的角度步长,一般取值CV_PI/180
  6. int threshold, // 阈值,只有获得足够交点的极坐标点才被看成是直线
  7. double srn=; // 是否应用多尺度的霍夫变换,如果不是设置0表示经典霍夫变换
  8. double stn=; // 是否应用多尺度的霍夫变换,如果不是设置0表示经典霍夫变换
  9. double min_theta=; // 表示角度扫描范围 0 ~180之间, 默认即可
  10. double max_theta=CV_PI
  11. ) // 一般情况是有经验的开发者使用,需要自己反变换到平面空间
  1. cv::HoughLinesP(
  2. InputArray src, // 输入图像,必须8-bit的灰度图像
  3. OutputArray lines, // 输出的极坐标来表示直线
  4. double rho, // 生成极坐标时候的像素扫描步长
  5. double theta, //生成极坐标时候的角度步长,一般取值CV_PI/180
  6. int threshold, // 阈值,只有获得足够交点的极坐标点才被看成是直线
  7. double minLineLength=; // 最小直线长度
  8. double maxLineGap=; // 最大间隔
  9. )
  1. int main(int argc, char** argv) {
  2. Mat src, src_gray, dst;
  3. src = imread(STRPAHT3);
  4. if (!src.data) {
  5. printf("could not load image...\n");
  6. return -;
  7. }
  8. //边缘检测
  9. Canny(src, src_gray, , );
  10. //灰度
  11. cvtColor(src_gray, dst, CV_GRAY2BGR);
  12. /*
  13. vector<Vec2f> lines;
  14. HoughLines(src_gray, lines, 1, CV_PI / 180, 150, 0, 0);
  15. for (size_t i = 0; i < lines.size(); i++) {
  16. float rho = lines[i][0]; // 极坐标中的r长度
  17. float theta = lines[i][1]; // 极坐标中的角度
  18. Point pt1, pt2;
  19. double a = cos(theta), b = sin(theta);
  20. double x0 = a * rho, y0 = b * rho;
  21. // 转换为平面坐标的四个点
  22. pt1.x = cvRound(x0 + 1000 * (-b));
  23. pt1.y = cvRound(y0 + 1000 * (a));
  24. pt2.x = cvRound(x0 - 1000 * (-b));
  25. pt2.y = cvRound(y0 - 1000 * (a));
  26. line(dst, pt1, pt2, Scalar(0, 0, 255), 1, CV_AA);
  27. }*/
  28.  
  29. vector<Vec4f> plines;
    //霍夫直线检测
  30. HoughLinesP(src_gray, plines, , CV_PI / 180.0, , , );
  31. Scalar color = Scalar(, , );
  32. for (size_t i = ; i < plines.size(); i++) {
  33. Vec4f hline = plines[i];
  34. line(dst, Point(hline[], hline[]), Point(hline[], hline[]), color, , LINE_AA);
  35. }
  36. imshow("OUTPUT_TITLE", dst);
  37.  
  38. waitKey();
  39. return ;
  40. }

opencv::霍夫变换-直线的更多相关文章

  1. opencv学习笔记霍夫变换——直线检测

    参考大佬博文:blog.csdn.net/jia20003/article/details/7724530 lps-683.iteye.com/blog/2254368 openCV里有两个函数(比较 ...

  2. 【CImg】霍夫变换——直线检测

    霍夫变换——直线检测 考古debug,其实很久之前就解决的bug......一直忘记过来改文章....欸 =============================原文================ ...

  3. 【python+opencv】直线检测+圆检测

     Python+OpenCV图像处理—— 直线检测 直线检测理论知识: 1.霍夫变换(Hough Transform) 霍夫变换是图像处理中从图像中识别几何形状的基本方法之一,应用很广泛,也有很多改进 ...

  4. 【OpenCV入门教程之十四】OpenCV霍夫变换:霍夫线变换,霍夫圆变换合辑

    http://blog.csdn.net/poem_qianmo/article/details/26977557 本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://blog ...

  5. 【OpenCV新手教程之十四】OpenCV霍夫变换:霍夫线变换,霍夫圆变换合辑

    本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/26977557 作者:毛星云(浅墨) ...

  6. Opencv中直线的表示方法

                               [blog算法原理]Opencv中直线的表示方法  一.问题的提出:​          在实际项目编写过程中,需要对直线(Line)进行特定的处 ...

  7. OpenCV——霍夫变换(直线检测、圆检测)

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

  8. opencv 霍夫变换 实现图片旋转角度计算

    在OCR实际开发中,证件照采集角度有很大的偏差,需要将图片进行旋转校正, 效果图: 在应用中发现应该加入高斯模糊,可以极大减少误差线条. 知道线条后 通过求斜率 得旋转角度 .(x1-x2)/(y1- ...

  9. 学习 opencv---(13)opencv霍夫变换:霍夫线变换,霍夫圆变换

    在本篇文章中,我们将一起学习opencv中霍夫变换相关的知识点,以及了解opencv中实现霍夫变换的HoughLines,HoughLinesP函数的使用方法,实现霍夫圆变换的HoughCircles ...

随机推荐

  1. asp.net core 使用HttpClientFactory Polly实现熔断降级

    前言 在++NET Core2.1++后也是增加更新了很多东西,当然HttpClientFactory更新中的一部分.虽然说HttpClient这个实现了disposable,但使用它的时候用usin ...

  2. sql字段为逗号分开的字符串值的关联查询

    1.TREE表: [strID] [int] IDENTITY(1,1) NOT NULL,[strName] [nvarchar](50) NOT NULL, 2.SubInfo CREATE TA ...

  3. 01 (OC)* @property 后面可以有哪些修饰符?

    一:@property 后面可以有哪些修饰符? 1:线程安全的: atomic,nonatomic 2:访问权限的 readonly,readwrite 3:内存管理(ARC) assign, cop ...

  4. preg_relace_callback不起作用匿名函数不启作用替换字符串中的所有图片

    遇到这样的一个需求,即替换新闻正文中的所有图片,将其图片地址补充为完整的地址. 刚开始的时候,采用匿名函数的方法可以使用,但有一个问题,好像是php的匿名函数5.4以前的版本支持的并不好. 然后在内部 ...

  5. nginx主配置参数详解

    ########Nginx的main(全局配置)文件 #指定nginx运行的用户及用户组,默认为nobody #user nobody; #开启的线程数,一般跟逻辑CPU核数一致 worker_pro ...

  6. Linux初识之VMWare14中配置Centos7桥接网络环境

    1.查看当前初始环境如下:

  7. Django开发纯后台服务的时候遇到CSRF引起的报错

    Django视图: 当请求为post请求时会遇到CSRF的报错,Django针对CSRF的保护措施是在生成的每个表单中放置一个自动生成的令牌,通过这个令牌判断POST请求是否来自同一个网站,只需要在f ...

  8. Java异常详谈

    什么是异常: 异常(Exception)是程序运行过程中发生的事件,该事件可以中断程序指令的正常执行流程. 注意: 如果实际抛出的异常对象属于Exception的子类对象,而继承自Throwable类 ...

  9. maven 3.6的安装

    呵呵,按网上的步骤不能安装maven3.6,所以降低版本.因为3.6的没有bin文件夹. 下载地址:https://archive.apache.org/dist/maven/maven-3/3.5. ...

  10. Spark的Java开发环境构建

    为开发和调试SPark应用程序设置的完整的开发环境.这里,我们将使用Java,其实SPark还支持使用Scala, Python和R.我们将使用IntelliJ作为IDE,因为我们对于eclipse再 ...