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中实现对list做减法操作介绍
Jan 09 Python
python写入xml文件的方法
May 08 Python
python基础练习之几个简单的游戏
Nov 10 Python
Python实现定时备份mysql数据库并把备份数据库邮件发送
Mar 08 Python
Python中反射和描述器总结
Sep 23 Python
Python利用pandas处理Excel数据的应用详解
Jun 18 Python
python操作kafka实践的示例代码
Jun 19 Python
Python3之不使用第三方变量,实现交换两个变量的值
Jun 26 Python
Django工程的分层结构详解
Jul 18 Python
Tensorflow矩阵运算实例(矩阵相乘,点乘,行/列累加)
Feb 05 Python
Python 找出出现次数超过数组长度一半的元素实例
May 11 Python
Python作用域和名称空间的详细介绍
Apr 13 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
php中json_encode处理gbk与gb2312中文乱码问题的解决方法
2014/07/10 PHP
PHP生成可点击刷新的验证码简单示例
2016/05/13 PHP
php读取出一个文件夹及其子文件夹下所有文件的方法示例
2017/06/15 PHP
javascript 面向对象编程基础:继承
2009/08/21 Javascript
Javascript 键盘keyCode键码值表
2009/12/24 Javascript
javascript 获取url参数和script标签中获取url参数函数代码
2010/01/22 Javascript
模拟jQuery ajax服务器端与客户端通信的代码
2011/03/28 Javascript
jQuery源码分析-01总体架构分析
2011/11/14 Javascript
jQuery根据ID获取input、checkbox、radio、select的示例
2014/08/11 Javascript
AngularJS 指令的交互详解及实例代码
2016/09/14 Javascript
AngularJS通过$sce输出html的方法
2016/09/22 Javascript
jQuery 遍历map()方法详解
2016/11/04 Javascript
JavaScript运动框架 解决防抖动问题、悬浮对联(二)
2017/05/17 Javascript
bootstrap table实现x-editable的行单元格编辑及解决数据Empty和支持多样式问题
2017/08/10 Javascript
mpvue 如何使用腾讯视频插件的方法
2018/07/16 Javascript
Vue中keep-alive的两种应用方式
2020/07/15 Javascript
[46:57]EG vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
使用python BeautifulSoup库抓取58手机维修信息
2013/11/21 Python
python实现dnspod自动更新dns解析的方法
2014/02/14 Python
浅谈Python类的__getitem__和__setitem__特殊方法
2016/12/25 Python
Python实现在tkinter中使用matplotlib绘制图形的方法示例
2018/01/18 Python
Python实现在某个数组中查找一个值的算法示例
2018/06/27 Python
几行Python代码爬取3000+上市公司的信息
2019/01/24 Python
PyCharm取消波浪线、下划线和中划线的实现
2020/03/03 Python
天猫超市:阿里巴巴打造的网上超市
2016/11/02 全球购物
旅游管理本科生求职信
2013/10/14 职场文书
计算机科学与技术应届生求职信
2013/11/07 职场文书
大学生个人简历自我评价
2013/11/16 职场文书
作弊检讨书1000字
2014/02/01 职场文书
军训学生自我鉴定
2014/02/12 职场文书
另类冲刺标语
2014/06/24 职场文书
毕业实习自我鉴定范文2014
2014/09/26 职场文书
基层党组织整改方案
2014/10/25 职场文书
先进单位申报材料
2014/12/25 职场文书
Python机器学习之底层实现KNN
2021/06/20 Python
MySQL数据库Innodb 引擎实现mvcc锁
2022/05/06 MySQL