python 用opencv实现霍夫线变换


Posted in Python onNovember 27, 2020

霍夫变换是一种检测任何形状的流行技术,可以检测形状,即使它被破坏或扭曲一点点.
一条线可以表示成y = mx + c或参数形式,像ρ=xcosθ+ysinθ,其中ρ是从原点到直线的垂直距离,θ角是由这条垂线和水平轴以逆时针的方向形成的(这个方向取决于你如何表示坐标系统,这种表示法在OpenCV中使用)

python 用opencv实现霍夫线变换

OpenCV中的Hough变换

cv.HoughLines()
第一个参数,输入图像应该是一个二值图像,因此在应用hough变换之前应用阈值或使用Canny边缘检测.
第二和第三个参数分别是ρ和θ的精度.
第四个参数是阈值,这意味着它应该被视为一条直线.
记住,选票的数量取决于直线上的点的数量,所以它表示应该检测到的最小长度.

import cv2
import numpy as np
from matplotlib import pyplot as plt

img = cv2.imread('img.jpg')
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
edges = cv2.Canny(gray,50,150,apertureSize = 3)

lines = cv2.HoughLines(edges,1,np.pi/180,200)
for line in lines:
  rho,theta = line[0]
  a = np.cos(theta)
  b = np.sin(theta)
  x0 = a*rho
  y0 = b*rho
  x1 = int(x0 + 1000*(-b))
  y1 = int(y0 + 1000*(a))
  x2 = int(x0 - 1000*(-b))
  y2 = int(y0 - 1000*(a))

  cv2.line(img,(x1,y1),(x2,y2),(0,0,255),2)

cv2.imshow('show',img)
cv2.waitKey()

python 用opencv实现霍夫线变换

概率Hough变换

在hough转换中,你可以看到,即使对于一个有两个参数的线,它也需要大量的计算.概率Hough变换是我们所见的Hough变换的一个优化,它并没有把所有的要点都考虑进去,相反,它只需要一个随机子集,对行检测来说足够.

cv2.HoughLinesP(image, rho, theta, threshold[, lines[, minLineLength[, maxLineGap]]])

  • minLineLength:最小长度的线。比这更短的线段被拒绝了。
  • maxLineGap:最大限度允许线段之间的间隙把它们当作一条线来对待
import cv2
import numpy as np
from matplotlib import pyplot as plt

img = cv2.imread('img.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
edges = cv2.Canny(gray, 50, 150, apertureSize=3)
lines = cv2.HoughLinesP(edges, 1, np.pi/180,100, minLineLength=100, maxLineGap=10)
for line in lines:
  x1, y1, x2, y2 = line[0]
  cv2.line(img, (x1, y1), (x2, y2), (0,255,0), 2)

cv2.imshow('show',img)
cv2.waitKey()

python 用opencv实现霍夫线变换

以上就是python 用opencv实现霍夫线变换的详细内容,更多关于python 实现霍夫线变换的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
Python中的类学习笔记
Sep 23 Python
用tensorflow搭建CNN的方法
Mar 05 Python
Python实现抓取HTML网页并以PDF文件形式保存的方法
May 08 Python
Sanic框架Cookies操作示例
Jul 17 Python
Python 写入训练日志文件并控制台输出解析
Aug 13 Python
Python目录和文件处理总结详解
Sep 02 Python
如何通过Django使用本地css/js文件
Jan 20 Python
Python更新所有已安装包的操作
Feb 13 Python
如何使用PyCharm将代码上传到GitHub上(图文详解)
Apr 27 Python
tensorflow模型的save与restore,及checkpoint中读取变量方式
May 26 Python
python在一个范围内取随机数的简单实例
Aug 16 Python
python简单利用字典破解zip文件口令
Sep 07 Python
详解python定时简单爬取网页新闻存入数据库并发送邮件
Nov 27 #Python
五种Python转义表示法
Nov 27 #Python
Django如何继承AbstractUser扩展字段
Nov 27 #Python
如何使用 Flask 做一个评论系统
Nov 27 #Python
python+openCV对视频进行截取的实现
Nov 27 #Python
Python环境配置实现pip加速过程解析
Nov 27 #Python
python实现学生信息管理系统(精简版)
Nov 27 #Python
You might like
打造计数器DIY三步曲(下)
2006/10/09 PHP
php中session_unset与session_destroy的区别分析
2011/06/16 PHP
采用header定义为文件然后readfile下载(隐藏下载地址)
2014/01/31 PHP
phalcon框架使用指南
2016/02/23 PHP
PHP扩展mcrypt实现的AES加密功能示例
2019/01/29 PHP
PHP单元测试配置与使用方法详解
2019/12/27 PHP
php 多进程编程父进程的阻塞与非阻塞实例分析
2020/02/22 PHP
js 深拷贝函数
2008/12/04 Javascript
js constructor的实际作用分析
2011/11/15 Javascript
浮动的div自适应居中显示的js代码
2013/12/23 Javascript
9款2014最热门jQuery实用特效推荐
2014/12/07 Javascript
JS实现让访问者自助选择网页文字颜色的方法
2015/02/24 Javascript
浅谈JSON.parse()和JSON.stringify()
2015/07/14 Javascript
JavaScript编程中布尔对象的基本使用
2015/10/25 Javascript
学习JavaScript设计模式(继承)
2015/11/26 Javascript
利用jQuery对无序列表排序的简单方法
2016/10/16 Javascript
jQuery Validate 数组 全部验证问题
2017/01/12 Javascript
jQuery实现导航回弹效果
2017/02/27 Javascript
Easyui Datagrid自定义按钮列(最后面的操作列)
2017/07/13 Javascript
jq源码解析之绑在$,jQuery上面的方法(实例讲解)
2017/10/13 jQuery
详解JS转换数值函数Number()、parseInt()、parseFloat()
2018/08/24 Javascript
基于JavaScript实现单例模式
2019/10/30 Javascript
Python 使用SMTP发送邮件的代码小结
2016/09/21 Python
对python opencv 添加文字 cv2.putText 的各参数介绍
2018/12/05 Python
Python去除字符串前后空格的几种方法
2019/03/04 Python
详解Python Matplot中文显示完美解决方案
2019/03/07 Python
Python3 串口接收与发送16进制数据包的实例
2019/06/12 Python
Pycharm+django2.2+python3.6+MySQL实现简单的考试报名系统
2019/09/05 Python
Python缓存技术实现过程详解
2019/09/25 Python
Keras实现支持masking的Flatten层代码
2020/06/16 Python
flask项目集成swagger的方法
2020/12/09 Python
利用html5 canvas动态画饼状图的示例代码
2018/04/02 HTML / CSS
2016春季幼儿园大班开学寄语
2015/12/03 职场文书
vue组件的路由高亮问题解决方法
2021/05/11 Vue.js
Django Paginator分页器的使用示例
2021/06/23 Python
Django框架中表单的用法
2022/06/10 Python