c++ 霍夫变换检测直线
通常这是一幅边缘图像,比如来自 Canny算子。cv:: Houghlines函数的输出是
cV::Vec2f向量,每个元素都是一对代表检测到的直线的浮点数(p,0)。在下例中
我们首先应用 Canny算子获取图像轮廓,然后基于霍夫变换检测直线
这个函数的的表达直线的方式用的不习惯的话可以用下面这个。
HoughLinesP函数的原型为:
void HoughLinesP(InputArray image,OutputArray lines, double rho, double theta, int threshold, double minLineLength=0,double maxLineGap=0 )
image为输入图像,要求是8位单通道图像
lines为输出的直线向量,每条线用4个元素表示,即直线的两个端点的4个坐标值
rho和theta分别为距离和角度的分辨率
threshold为阈值,即步骤3中的阈值
minLineLength为最小直线长度,在步骤5中要用到,即如果小于该值,则不被认为是一条直线
maxLineGap为最大直线间隙,在步骤4中要用到,即如果有两条线段是在一条直线上,但它们之间因为有间隙,所以被认为是两个线段,如果这个间隙大于该值,则被认为是两条线段,否则是一条。
http://blog.csdn.net/viewcode/article/details/8090932
http://blog.csdn.net/zhaocj/article/details/40047397
int main()
{
Mat img = imread("D:\\pdf2jpg\\nn\\00010.jpg"); //GetRedComponet(img);
Mat contours,res;
Canny(img,contours,,);
cvtColor( contours, res, CV_GRAY2BGR );
vector<Vec4i> lines;
HoughLinesP(contours, lines, , CV_PI/, , , );
for( size_t i = ; i < lines.size(); i++ )
{
Vec4i l = lines[i];
line(res, Point(l[], l[]), Point(l[], l[]), Scalar(,,), );
}
imwrite("D:\\dst1.jpg",res);
}
统计概论霍夫直线检测houghlinesP是一个改进,不仅执行效率较高,而且能检测到直线的两个端点。
思想:
先随机检测出一部分直线,然后将直线上点的排查掉,再进行其他直线的检测
1. 首先仅统计图像中非零点的个数,对于已经确认是某条直线上的点就不再变换了。
2. 对所以有非零点逐个变换到霍夫空间
a. 并累加到霍夫统计表(图像)中,并统计最大值
b. 最大值与阈值比较,小于阈值,则继续下一个点的变换
c. 若大于阈值,则有一个新的直线段要产生了
d. 计算直线上线段的端点、长度,如果符合条件,则保存此线段,并mark这个线段上的点不参与其他线段检测的变换
c++ 霍夫变换检测直线的更多相关文章
- OpenCV-Python教程(9、使用霍夫变换检测直线)
相比C++而言,Python适合做原型.本系列的文章介绍如何在Python中用OpenCV图形库,以及与C++调用相应OpenCV函数的不同之处.这篇文章介绍在Python中使用OpenCV的霍夫变换 ...
- OpenCV——霍夫变换(直线检测、圆检测)
x #include <opencv2/opencv.hpp> #include <iostream> #include <math.h> using namesp ...
- Hough直线and圆环变换(如何检测直线、圆环)
1.霍夫变换 2.cv2.HoughLines() 返回值就是(ρ, θ).ρ 的单位是像素,θ 的单位是弧度.这个函数的第一个参 数是一个二值化图像,所以在进行霍夫变换之前要首先进行二值化,或者进行 ...
- Python-Anaconda练习candy算子用于边缘提取,再用hough变换检测直线边缘
img: 待检测的图像. threshold: 阈值,可先项,默认为10 line_length: 检测的最短线条长度,默认为50 line_gap: 线条间的最大间隙.增大这个值可以合并破碎的线条. ...
- hough变换检测直线和圆
图像测量和机器视觉作业: 提取图像中的直线和点的位置坐标,将其按一定顺序编码存入一文本文件,并在原图像上叠加显示出来. 下午实验了一下: 程序环境:vs2013(活动平台为x64)+opencv3.1 ...
- matlab 霍夫变换—检测圆
function [hough_space,hough_circle,para] = hough_Circle(BW,step_r,step_angle,r_min,r_max,p) % %%%%%% ...
- Python下opencv使用笔记(十一)(详解hough变换检测直线与圆)
http://blog.csdn.net/on2way/article/details/47028969 http://blog.csdn.net/mokeding/article/details/1 ...
- 第三章 霍夫变换(Hough Transform)
主要内容: 霍夫变换的作用 霍夫变换检测直线的原理 霍夫变换检测圆的原理 OpenCV中的霍夫变换 1.霍夫变换检测直线原理 霍夫变换,英文名称Hough Transform,作用是用来检测图像中的直 ...
- OpenCV之Python学习笔记
OpenCV之Python学习笔记 直都在用Python+OpenCV做一些算法的原型.本来想留下发布一些文章的,可是整理一下就有点无奈了,都是写零散不成系统的小片段.现在看 到一本国外的新书< ...
随机推荐
- powerdesigner解决创建多个表表主键名称重复的问题
选择菜单栏的tools选项,选择Model Options..,选择Model Settings 只要将图片中的选择打钩去掉即可(操作步骤1),同时设置为默认选项(操作步骤2),防止以后问题又出现 ...
- angularjs 的controller的三种写法
AngularJS 的controller其实就是一个方法,它有三种写法: 第一种: <pre name="code" class="javascript" ...
- Linux网络性能评估工具iperf 、CHARIOT测试网络吞吐量
网络性能评估主要是监测网络带宽的使用率,将网络带宽利用最大化是保证网络性能的基础,但是由于网络设计不合理.网络存在安全漏洞等原因,都会导致网络带宽利用率不高.要找到网络带宽利用率不高的原因,就需要对网 ...
- Keepalived + Mysql 主主复制高可用
环境 系统:Centos 7.4 x64 服务:Mariadb 5.5 .Keepalived 1.3.5.6 结构 主1:192.168.1.108 主2:192.168.1.109 VIP:19 ...
- 20145201《Java程序设计》课程总结
每周读书笔记链接汇总 第一周读书笔记:http://www.cnblogs.com/20145201lzx/p/5249064.html 第二周读书笔记:http://www.cnblogs.com/ ...
- 关于Simplicity Studio使用math.h编译出错
原因是未调用C标准库. 解决方法: 1.点项目右键——>properties——>C/C++Build——>Settings——>GNU ARM C Linker——>L ...
- MapReduce:输入是两个文件,file1代表工厂表,包含工厂名列和地址编号列;file2代表地址表,包含地址名列和地址编号列。要求从输入数据中找出工厂名和地址名的对应关系,输出"工厂名----地址名"表
文件如下: file1: Beijing Red Star Shenzhen Thunder Guangzhou Honda Beijing Rising Guangzhou Development ...
- React之JSX语法
1. JSX的介绍 JSX(JavaScript XML)——一种在React组件内部构建标签的类XML语法.react在不使用JSX的情况下一样可以工作,然而使用JSX可以提高组件的可读性,因此 ...
- php上传文件后无法移动到指定目录的解决
从浏览器访问而触发PHP脚本运行的用户是 apache 用户 无法移动文件的原因主要是目标目录没有写入权限 1.将目标目录权限设置为 777 #chmod 777 tar_dir 2.将目标目录用户和 ...
- Effective C++ 条款12:复制对象时勿忘其每一个成分
void logCall(const std::string& funcName); class Customer { public: ... Customer (const Customer ...