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中设置变量作为默认值时容易遇到的错误
Apr 03 Python
在arcgis使用python脚本进行字段计算时是如何解决中文问题的
Oct 18 Python
Python3中的真除和Floor除法用法分析
Mar 16 Python
Django框架基础模板标签与filter使用方法详解
Jul 23 Python
使用 Python 写一个简易的抽奖程序
Dec 08 Python
python读取文件指定行内容实例讲解
Mar 02 Python
pandas数据拼接的实现示例
Apr 16 Python
python3中sys.argv的实例用法
Apr 24 Python
Python新手学习raise用法
Jun 03 Python
Python Tkinter图形工具使用方法及实例解析
Jun 15 Python
大数据分析用java还是Python
Jul 06 Python
Restful_framework视图组件代码实例解析
Nov 17 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
极典R601SW收音机
2021/03/02 无线电
php 随机数的产生、页面跳转、件读写、文件重命名、switch语句
2009/08/07 PHP
php中简单的对称加密算法实现
2017/01/05 PHP
Windows下php+mysql5.7配置教程
2017/05/16 PHP
详解PHP如何更好的利用PHPstorm的自动提示
2017/08/18 PHP
ko knockoutjs动态属性绑定技巧应用
2012/11/14 Javascript
jquery 清空file域示例(兼容个浏览器)
2013/10/11 Javascript
屏蔽相应键盘按钮操作
2014/03/10 Javascript
浅谈JavaScript 框架分类
2014/11/10 Javascript
常见的jQuery选择器汇总
2014/11/24 Javascript
JS+CSS实现下拉列表框美化效果(3款)
2015/08/15 Javascript
每天一篇javascript学习小结(RegExp对象)
2015/11/17 Javascript
JavaScript中的this到底是什么(一)
2015/12/09 Javascript
浅析javascript中的Event事件
2016/12/09 Javascript
nodejs实例解析(输出hello world)
2017/01/03 NodeJs
Element-ui table中过滤条件变更表格内容的方法
2018/03/02 Javascript
Vue二次封装axios为插件使用详解
2018/05/21 Javascript
Django+Vue跨域环境配置详解
2018/07/06 Javascript
js中addEventListener()与removeEventListener()用法案例分析
2020/03/02 Javascript
[06:20]2015国际邀请赛第三日top10
2015/08/08 DOTA
Python验证码识别的方法
2015/07/10 Python
python实现红包裂变算法
2016/02/16 Python
Python+matplotlib+numpy绘制精美的条形统计图
2018/01/02 Python
python 反向输出字符串的方法
2018/07/16 Python
解决pyqt5中QToolButton无法使用的问题
2019/06/21 Python
python使用matplotlib绘制雷达图
2019/10/18 Python
From CSV to SQLite3 by python 导入csv到sqlite实例
2020/02/14 Python
python中用ctypes模拟点击的实例讲解
2020/11/26 Python
CSS3教程(3):border-color网页边框色彩
2009/04/02 HTML / CSS
MyBag中文网:英国著名的时尚包袋电商零售网站
2020/07/31 全球购物
php优化查询foreach代码实例讲解
2021/03/24 PHP
自我评价怎么写好呢?
2013/12/05 职场文书
上课迟到检讨书100字
2014/01/11 职场文书
学习教师法的心得体会
2014/09/03 职场文书
预备党员学习十八届三中全会精神思想汇报
2014/09/13 职场文书
2016教师学习党章心得体会
2016/01/15 职场文书