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 httplib模块使用实例
Apr 11 Python
讲解Python的Scrapy爬虫框架使用代理进行采集的方法
Feb 18 Python
Python中列表、字典、元组数据结构的简单学习笔记
Mar 20 Python
总结用Pdb库调试Python的方式及常用的命令
Aug 18 Python
python django事务transaction源码分析详解
Mar 17 Python
python实现验证码识别功能
Jun 07 Python
pyinstaller参数介绍以及总结详解
Jul 12 Python
详解python uiautomator2 watcher的使用方法
Sep 09 Python
Python qrcode 生成一个二维码的实例详解
Feb 12 Python
Python如何获取文件指定行的内容
May 27 Python
python用tkinter实现一个gui的翻译工具
Oct 26 Python
分享python函数常见关键字
Apr 26 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
关于使用coreseek并为其做分页的介绍
2013/06/21 PHP
PHP根据传来的16进制颜色代码自动改变背景颜色
2014/06/13 PHP
PHP图像处理类库MagickWand用法实例分析
2015/05/21 PHP
PHP测试成功的邮件发送案例
2015/10/26 PHP
详解PHP中cookie和session的区别及cookie和session用法小结
2016/06/12 PHP
PHP回调函数与匿名函数实例详解
2017/08/16 PHP
PHP基于堆栈实现的高级计算器功能示例
2017/09/15 PHP
使用jQuery fancybox插件打造一个实用的数据传输模态弹出窗体
2013/01/15 Javascript
使用jQuery将多条数据插入模态框的实现代码
2014/10/08 Javascript
js电话号码验证方法
2015/09/28 Javascript
jQuery 常见小例汇总
2016/12/14 Javascript
JS轮播图实现简单代码
2021/02/19 Javascript
layui实现table加载的示例代码
2018/08/14 Javascript
Vue开发之封装上传文件组件与用法示例
2019/04/25 Javascript
如何让Nodejs支持H5 History模式(connect-history-api-fallback源码分析)
2019/05/30 NodeJs
vue-router结合vuex实现用户权限控制功能
2019/11/14 Javascript
JS实现点餐自动选择框(案例分析)
2019/12/10 Javascript
[03:42]2014DOTA2国际邀请赛 第三日比赛排位扑朔迷离
2014/07/12 DOTA
tf.truncated_normal与tf.random_normal的详细用法
2018/03/05 Python
python批量替换多文件字符串问题详解
2018/04/22 Python
python画一个玫瑰和一个爱心
2020/08/18 Python
python发送告警邮件脚本
2018/09/17 Python
Python多进程写入同一文件的方法
2019/01/14 Python
Django ImageFiled上传照片并显示的方法
2019/07/28 Python
Python实现图片识别加翻译功能
2019/12/26 Python
Python字符串三种格式化输出
2020/09/17 Python
python matplotlib工具栏源码探析二之添加、删除内置工具项的案例
2021/02/25 Python
Weblogic的布署方式
2013/08/23 面试题
如何利用find命令查找文件
2015/02/07 面试题
仓库文员岗位职责
2014/04/06 职场文书
《神奇的克隆》教学反思
2014/04/10 职场文书
欠款纠纷起诉状
2015/05/19 职场文书
开票证明
2015/06/23 职场文书
学生安全责任协议书
2016/03/22 职场文书
Golang标准库syscall详解(什么是系统调用)
2021/05/25 Golang
Apache POI操作批量导入MySQL数据库
2022/06/21 Servers