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绘制3d螺旋曲线图实例代码
Dec 20 Python
python版微信跳一跳游戏辅助
Jan 11 Python
Python下载网络文本数据到本地内存的四种实现方法示例
Feb 05 Python
python 拷贝特定后缀名文件,并保留原始目录结构的实例
Apr 27 Python
numpy使用fromstring创建矩阵的实例
Jun 15 Python
python3将视频流保存为本地视频文件
Jun 20 Python
python3实现爬取淘宝美食代码分享
Sep 23 Python
对python3 中方法各种参数和返回值详解
Dec 15 Python
Python学习笔记之函数的定义和作用域实例详解
Aug 13 Python
python实现PCA降维的示例详解
Feb 24 Python
python nohup 实现远程运行不宕机操作
Apr 16 Python
python获取对象信息的实例详解
Jul 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
中国第一家无线电行
2021/03/01 无线电
用IE远程创建Mysql数据库的简易程序
2006/10/09 PHP
php抓取页面与代码解析 推荐
2010/07/23 PHP
利用PHP函数计算中英文字符串长度的方法
2014/11/11 PHP
php通过session防url攻击方法
2014/12/10 PHP
自己写的php curl库实现整站克隆功能
2015/02/12 PHP
ThinkPHP路由机制简介
2016/03/23 PHP
php字符串函数 str类常见用法示例
2020/05/15 PHP
getElementByIdx_x js自定义getElementById函数
2012/01/24 Javascript
第十篇BootStrap轮播插件使用详解
2016/06/21 Javascript
jQuery+HTML5实现弹出创意搜索框层
2016/12/29 Javascript
说说AngularJS中的$parse和$eval的用法
2017/09/14 Javascript
微信小程序-getUserInfo回调的实例详解
2017/10/27 Javascript
React diff算法的实现示例
2018/04/20 Javascript
为什么使用koa2搭建微信第三方公众平台的原因
2018/05/16 Javascript
vue 父组件给子组件传值子组件给父组件传值的实例代码
2019/04/15 Javascript
vue列表单项展开收缩功能之this.$refs的详解
2019/05/05 Javascript
浅谈Vue为什么不能检测数组变动
2019/10/14 Javascript
Vue使用Element实现增删改查+打包的步骤
2020/11/25 Vue.js
如何正确解决VuePress本地访问出现资源报错404的问题
2020/12/03 Vue.js
python备份文件以及mysql数据库的脚本代码
2013/06/10 Python
python3实现TCP协议的简单服务器和客户端案例(分享)
2017/06/14 Python
python绘制铅球的运行轨迹代码分享
2017/11/14 Python
Python实现的登录验证系统完整案例【基于搭建的MVC框架】
2019/04/12 Python
python新式类和经典类的区别实例分析
2020/03/23 Python
DjangoWeb使用Datatable进行后端分页的实现
2020/05/18 Python
python实现二分查找算法
2020/09/18 Python
用python制作个音乐下载器
2021/01/30 Python
网上常见的一份Linux面试题(多项选择部分)
2015/02/07 面试题
JS原生实现轮播图的几种方法
2021/03/23 Javascript
学生处主任岗位职责
2013/12/01 职场文书
实习生个人的自我评价
2013/12/08 职场文书
小学生国旗下演讲稿
2014/04/25 职场文书
乒乓球兴趣小组活动总结
2014/07/08 职场文书
教师学习十八届五中全会精神心得体会
2016/01/05 职场文书
2016预备党员培训心得体会
2016/01/08 职场文书