opencv::霍夫变换-直线
霍夫直线变换介绍
Hough Line Transform用来做直线检测
前提条件 – 边缘检测已经完成
平面空间到极坐标空间转换
对于任意一条直线上的所有点来说,变换到极坐标中,从[0~360]空间,可以得到r的大小
属于同一条直线上点在极坐标空(r, theta)必然在一个点上有最强的信号出现,根据此反算到平面坐标中就可以得到直线上各点的像素坐标。从而得到直线.
标准的霍夫变换 cv::HoughLines从平面坐标转换到霍夫空间,最终输出是 表示极坐标空间
霍夫变换直线概率 cv::HoughLinesP最终输出是直线的两个点
- cv::HoughLines(
- InputArray src, // 输入图像,必须8-bit的灰度图像
- OutputArray lines, // 输出的极坐标来表示直线
- double rho, // 生成极坐标时候的像素扫描步长
- double theta, // 生成极坐标时候的角度步长,一般取值CV_PI/180
- int threshold, // 阈值,只有获得足够交点的极坐标点才被看成是直线
- double srn=; // 是否应用多尺度的霍夫变换,如果不是设置0表示经典霍夫变换
- double stn=; // 是否应用多尺度的霍夫变换,如果不是设置0表示经典霍夫变换
- double min_theta=; // 表示角度扫描范围 0 ~180之间, 默认即可
- double max_theta=CV_PI
- ) // 一般情况是有经验的开发者使用,需要自己反变换到平面空间
- cv::HoughLinesP(
- InputArray src, // 输入图像,必须8-bit的灰度图像
- OutputArray lines, // 输出的极坐标来表示直线
- double rho, // 生成极坐标时候的像素扫描步长
- double theta, //生成极坐标时候的角度步长,一般取值CV_PI/180
- int threshold, // 阈值,只有获得足够交点的极坐标点才被看成是直线
- double minLineLength=; // 最小直线长度
- double maxLineGap=; // 最大间隔
- )
- int main(int argc, char** argv) {
- Mat src, src_gray, dst;
- src = imread(STRPAHT3);
- if (!src.data) {
- printf("could not load image...\n");
- return -;
- }
- //边缘检测
- Canny(src, src_gray, , );
- //灰度
- cvtColor(src_gray, dst, CV_GRAY2BGR);
- /*
- vector<Vec2f> lines;
- HoughLines(src_gray, lines, 1, CV_PI / 180, 150, 0, 0);
- for (size_t i = 0; i < lines.size(); i++) {
- float rho = lines[i][0]; // 极坐标中的r长度
- float theta = lines[i][1]; // 极坐标中的角度
- Point pt1, pt2;
- double a = cos(theta), b = sin(theta);
- double x0 = a * rho, y0 = b * rho;
- // 转换为平面坐标的四个点
- pt1.x = cvRound(x0 + 1000 * (-b));
- pt1.y = cvRound(y0 + 1000 * (a));
- pt2.x = cvRound(x0 - 1000 * (-b));
- pt2.y = cvRound(y0 - 1000 * (a));
- line(dst, pt1, pt2, Scalar(0, 0, 255), 1, CV_AA);
- }*/
- vector<Vec4f> plines;
//霍夫直线检测- HoughLinesP(src_gray, plines, , CV_PI / 180.0, , , );
- Scalar color = Scalar(, , );
- for (size_t i = ; i < plines.size(); i++) {
- Vec4f hline = plines[i];
- line(dst, Point(hline[], hline[]), Point(hline[], hline[]), color, , LINE_AA);
- }
- imshow("OUTPUT_TITLE", dst);
- waitKey();
- return ;
- }
opencv::霍夫变换-直线的更多相关文章
- opencv学习笔记霍夫变换——直线检测
参考大佬博文:blog.csdn.net/jia20003/article/details/7724530 lps-683.iteye.com/blog/2254368 openCV里有两个函数(比较 ...
- 【CImg】霍夫变换——直线检测
霍夫变换——直线检测 考古debug,其实很久之前就解决的bug......一直忘记过来改文章....欸 =============================原文================ ...
- 【python+opencv】直线检测+圆检测
Python+OpenCV图像处理—— 直线检测 直线检测理论知识: 1.霍夫变换(Hough Transform) 霍夫变换是图像处理中从图像中识别几何形状的基本方法之一,应用很广泛,也有很多改进 ...
- 【OpenCV入门教程之十四】OpenCV霍夫变换:霍夫线变换,霍夫圆变换合辑
http://blog.csdn.net/poem_qianmo/article/details/26977557 本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://blog ...
- 【OpenCV新手教程之十四】OpenCV霍夫变换:霍夫线变换,霍夫圆变换合辑
本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/26977557 作者:毛星云(浅墨) ...
- Opencv中直线的表示方法
[blog算法原理]Opencv中直线的表示方法 一.问题的提出: 在实际项目编写过程中,需要对直线(Line)进行特定的处 ...
- OpenCV——霍夫变换(直线检测、圆检测)
x #include <opencv2/opencv.hpp> #include <iostream> #include <math.h> using namesp ...
- opencv 霍夫变换 实现图片旋转角度计算
在OCR实际开发中,证件照采集角度有很大的偏差,需要将图片进行旋转校正, 效果图: 在应用中发现应该加入高斯模糊,可以极大减少误差线条. 知道线条后 通过求斜率 得旋转角度 .(x1-x2)/(y1- ...
- 学习 opencv---(13)opencv霍夫变换:霍夫线变换,霍夫圆变换
在本篇文章中,我们将一起学习opencv中霍夫变换相关的知识点,以及了解opencv中实现霍夫变换的HoughLines,HoughLinesP函数的使用方法,实现霍夫圆变换的HoughCircles ...
随机推荐
- asp.net core 使用HttpClientFactory Polly实现熔断降级
前言 在++NET Core2.1++后也是增加更新了很多东西,当然HttpClientFactory更新中的一部分.虽然说HttpClient这个实现了disposable,但使用它的时候用usin ...
- sql字段为逗号分开的字符串值的关联查询
1.TREE表: [strID] [int] IDENTITY(1,1) NOT NULL,[strName] [nvarchar](50) NOT NULL, 2.SubInfo CREATE TA ...
- 01 (OC)* @property 后面可以有哪些修饰符?
一:@property 后面可以有哪些修饰符? 1:线程安全的: atomic,nonatomic 2:访问权限的 readonly,readwrite 3:内存管理(ARC) assign, cop ...
- preg_relace_callback不起作用匿名函数不启作用替换字符串中的所有图片
遇到这样的一个需求,即替换新闻正文中的所有图片,将其图片地址补充为完整的地址. 刚开始的时候,采用匿名函数的方法可以使用,但有一个问题,好像是php的匿名函数5.4以前的版本支持的并不好. 然后在内部 ...
- nginx主配置参数详解
########Nginx的main(全局配置)文件 #指定nginx运行的用户及用户组,默认为nobody #user nobody; #开启的线程数,一般跟逻辑CPU核数一致 worker_pro ...
- Linux初识之VMWare14中配置Centos7桥接网络环境
1.查看当前初始环境如下:
- Django开发纯后台服务的时候遇到CSRF引起的报错
Django视图: 当请求为post请求时会遇到CSRF的报错,Django针对CSRF的保护措施是在生成的每个表单中放置一个自动生成的令牌,通过这个令牌判断POST请求是否来自同一个网站,只需要在f ...
- Java异常详谈
什么是异常: 异常(Exception)是程序运行过程中发生的事件,该事件可以中断程序指令的正常执行流程. 注意: 如果实际抛出的异常对象属于Exception的子类对象,而继承自Throwable类 ...
- maven 3.6的安装
呵呵,按网上的步骤不能安装maven3.6,所以降低版本.因为3.6的没有bin文件夹. 下载地址:https://archive.apache.org/dist/maven/maven-3/3.5. ...
- Spark的Java开发环境构建
为开发和调试SPark应用程序设置的完整的开发环境.这里,我们将使用Java,其实SPark还支持使用Scala, Python和R.我们将使用IntelliJ作为IDE,因为我们对于eclipse再 ...