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 相关文章推荐
Python随机生成一个6位的验证码代码分享
Mar 24 Python
Python爬虫之正则表达式基本用法实例分析
Aug 08 Python
Python第三方Window模块文件的几种安装方法
Nov 22 Python
Python设计模式之装饰模式实例详解
Jan 21 Python
Python制作动态字符图的实例
Jan 27 Python
numpy和pandas中数组的合并、拉直和重塑实例
Jun 28 Python
Python3批量移动指定文件到指定文件夹方法示例
Sep 02 Python
python实现FTP循环上传文件
Mar 20 Python
pyqt5数据库使用详细教程(打包解决方案)
Mar 25 Python
浅谈django不使用restframework自定义接口与使用的区别
Jul 15 Python
浅析pandas随机排列与随机抽样
Jan 22 Python
浅谈Python列表嵌套字典转化的问题
Apr 07 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
分页显示Oracle数据库记录的类之二
2006/10/09 PHP
PHP中基于ts与nts版本- vc6和vc9编译版本的区别详解
2013/04/26 PHP
百度地图API应用之获取用户的具体位置
2014/06/10 PHP
php 使用mpdf实现指定字段配置字体样式的方法
2019/07/29 PHP
javascript setTimeout和setInterval 的区别
2009/12/08 Javascript
判断复选框是否被选中的两种方法
2014/06/04 Javascript
实现js保留小数点后N位的代码
2014/11/13 Javascript
Node.js实用代码段之正确拼接Buffer
2016/03/17 Javascript
js判断登陆用户名及密码是否为空的简单实例
2016/05/16 Javascript
基于JS实现类似支付宝支付密码输入框
2016/09/02 Javascript
jQuery tagsinput在h5邮件客户端中应用详解
2016/09/26 Javascript
浅谈javascript:两种注释,声明变量,定义函数
2016/09/29 Javascript
Javascript基础回顾之(三) js面向对象
2017/01/31 Javascript
ionic2 tabs 图标自定义实例
2017/03/08 Javascript
js 用于检测类数组对象的函数方法
2017/05/02 Javascript
Angularjs自定义指令实现分页插件(DEMO)
2017/09/16 Javascript
详解vue项目接入微信JSSDK的坑
2018/12/14 Javascript
vue图片上传本地预览组件使用详解
2019/02/20 Javascript
js前端面试之同步与异步问题详解
2019/04/03 Javascript
基于vue实现圆形菜单栏组件
2019/07/05 Javascript
JS使用正则表达式判断输入框失去焦点事件
2019/10/16 Javascript
Python中使用 Selenium 实现网页截图实例
2014/07/18 Python
用Python编写web API的教程
2015/04/30 Python
详解python函数传参是传值还是传引用
2018/01/16 Python
python实现将多个文件分配到多个文件夹的方法
2019/01/07 Python
Django REST framework视图的用法
2019/01/16 Python
python版DDOS攻击脚本
2019/06/12 Python
python 协程 gevent原理与用法分析
2019/11/22 Python
解决PyCharm IDE环境下,执行unittest不生成测试报告的问题
2020/09/03 Python
基层干部十八大感言
2014/01/19 职场文书
助人为乐好少年事迹材料
2014/08/18 职场文书
宝宝满月宴答谢词
2015/09/30 职场文书
班主任班级管理心得体会
2016/01/07 职场文书
2017新年晚会开幕词
2016/03/03 职场文书
CSS3 制作的图片滚动效果
2021/04/14 HTML / CSS
英国数字版游戏销量周榜公布 《小缇娜的奇幻之地》登顶
2022/04/03 其他游戏