python hough变换检测直线的实现方法


Posted in Python onJuly 12, 2019

1 原理

python hough变换检测直线的实现方法

 2 检测步骤

将参数空间(ρ,θ) 量化成m*n(m为ρ的等份数,n为θ的等份数)个单元,并设置累加器矩阵,初始值为0;

对图像边界上的每一个点(x,y)带入ρ=xcosθ+ysinθ,求得每个θ对应的ρ值,并在ρ和θ所对应的单元,将累加器加1,即:Q(i,j)=Q(i,j)+1;

检验参数空间中每个累加器的值,累加器最大的单元所对应的ρ和θ即为直角坐标系中直线方程的参数。

 3 接口

python hough变换检测直线的实现方法

image:二值图像,canny边缘检测输出。这里是result。
rho: 以像素为单位的距离精度,这里为1像素。如果想要检测的线段更多,可以设为0.1。
theta: 以弧度为单位的角度精度,这里为numpy.pi/180。如果想要检测的线段更多,可以设为0.01 * numpy.pi/180。
threshod: 阈值参数,int类型,超过设定阈值才被检测出线段,这里为10。
minLineLength:线段以像素为单位的最小长度。
maxLineGap:同一方向上两条线段判定为一条线段的最大允许间隔。

4 代码及结果

import os
import numpy as np
import cv2
from PIL import Image, ImageEnhance
import math
 
 
def img_processing(img):
  # 灰度化
  gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
  ret, binary = cv2.threshold(gray, 0, 255, cv2.THRESH_OTSU)
  # canny边缘检测
  edges = cv2.Canny(binary, 50, 150, apertureSize=3)
  return edges
 
 
def line_detect(img):
  img = Image.open(img)
  img = ImageEnhance.Contrast(img).enhance(3)
  # img.show()
  img = np.array(img)
  result = img_processing(img)
  # 霍夫线检测
  lines = cv2.HoughLinesP(result, 1, 1 * np.pi/180, 10, minLineLength=10, maxLineGap=5)
  # print(lines)
  print("Line Num : ", len(lines))
 
  # 画出检测的线段
  for line in lines:
    for x1, y1, x2, y2 in line:
      cv2.line(img, (x1, y1), (x2, y2), (255, 0, 0), 1)
    pass
  img = Image.fromarray(img, 'RGB')
  img.show()
 
 
if __name__ == "__main__":
  line_detect("1.jpg")
  pass

原图如下:

python hough变换检测直线的实现方法

检测结果:

python hough变换检测直线的实现方法

python hough变换检测直线的实现方法

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
采用Psyco实现python执行速度提高到与编译语言一样的水平
Oct 11 Python
Python的Flask框架标配模板引擎Jinja2的使用教程
Jul 12 Python
Python爬虫通过替换http request header来欺骗浏览器实现登录功能
Jan 07 Python
Python实现的字典值比较功能示例
Jan 08 Python
Python的numpy库中将矩阵转换为列表等函数的方法
Apr 04 Python
新年快乐! python实现绚烂的烟花绽放效果
Jan 30 Python
python实现飞机大战游戏
Oct 26 Python
Python多版本开发环境管理工具介绍
Jul 03 Python
python如何设置静态变量
Sep 07 Python
python实现学生信息管理系统(精简版)
Nov 27 Python
python抢购软件/插件/脚本附完整源码
Mar 04 Python
详解python字符串驻留技术
May 21 Python
Python实现的远程文件自动打包并下载功能示例
Jul 12 #Python
完美解决python3.7 pip升级 拒绝访问问题
Jul 12 #Python
在交互式环境中执行Python程序过程详解
Jul 12 #Python
pip指定python位置安装软件包的方法
Jul 12 #Python
python使用Pandas库提升项目的运行速度过程详解
Jul 12 #Python
Python-copy()与deepcopy()区别详解
Jul 12 #Python
新手入门Python编程的8个实用建议
Jul 12 #Python
You might like
9个经典的PHP代码片段分享
2014/12/18 PHP
php中fsockopen用法实例
2015/01/05 PHP
android上传图片到PHP的过程详解
2015/08/03 PHP
必须收藏的php实用代码片段
2016/02/02 PHP
PHP7安装Redis扩展教程【Linux与Windows平台】
2016/09/30 PHP
PHP读取word文档的方法分析【基于COM组件】
2017/08/01 PHP
php中文语义分析实现方法示例
2019/09/28 PHP
Aptana调试javascript图解教程
2009/11/30 Javascript
input的focus方法使用
2010/03/13 Javascript
JavaScript分页功能的实现方法
2015/04/25 Javascript
深入JavaScript高级程序设计之对象、数组(栈方法,队列方法,重排序方法,迭代方法)
2015/12/01 Javascript
简单对比分析JavaScript中的apply,call与this的使用
2015/12/04 Javascript
浅析C/C++,Java,PHP,JavaScript,Json数组、对象赋值时最后一个元素后面是否可以带逗号
2016/03/22 Javascript
jQuery中弹出iframe内嵌页面元素到父页面并全屏化的实例代码
2016/12/27 Javascript
详解在Vue中有条件地使用CSS类
2017/09/30 Javascript
基于Bootstrap下拉框插件bootstrap-select使用方法详解
2018/08/07 Javascript
layui radio单选限制下一个radio单选的实例
2019/09/03 Javascript
[50:11]2018DOTA2亚洲邀请赛 4.7总决赛 LGD vs Mineski 第三场
2018/04/09 DOTA
Python实现list反转实例汇总
2014/11/11 Python
深入解析Python中的线程同步方法
2016/06/14 Python
Python实现树的先序、中序、后序排序算法示例
2017/06/23 Python
Python设计实现的计算器功能完整实例
2017/08/18 Python
Python 字符串转换为整形和浮点类型的方法
2018/07/17 Python
Python用5行代码写一个自定义简单二维码
2018/10/21 Python
Python scrapy增量爬取实例及实现过程解析
2019/12/24 Python
Python内置类型性能分析过程实例
2020/01/29 Python
在keras中model.fit_generator()和model.fit()的区别说明
2020/06/17 Python
欧舒丹英国官网:购买欧舒丹护手霜等明星产品
2017/01/17 全球购物
世界上最好的儿童品牌:AlexandAlexa
2018/01/27 全球购物
写演讲稿所需要注意的4个条件
2014/01/09 职场文书
纪念建党演讲稿范文
2014/01/13 职场文书
暑期培训随笔感言
2014/03/10 职场文书
爱情寄语大全
2014/04/09 职场文书
刑事辩护授权委托书
2014/09/13 职场文书
2014年残联工作总结
2014/11/21 职场文书
军事博物馆观后感
2015/06/05 职场文书