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 28 Python
python使用xmlrpclib模块实现对百度google的ping功能
Jun 02 Python
Python 中开发pattern的string模板(template) 实例详解
Apr 01 Python
Pycharm远程调试openstack的方法
Nov 21 Python
从DataFrame中提取出Series或DataFrame对象的方法
Nov 10 Python
Python如何实现转换URL详解
Jul 02 Python
Python学习笔记之列表推导式实例分析
Aug 13 Python
Python箱型图处理离群点的例子
Dec 09 Python
使用python的turtle函数绘制一个滑稽表情
Feb 28 Python
Python按照list dict key进行排序过程解析
Apr 04 Python
Python requests.post方法中data与json参数区别详解
Apr 30 Python
Python计算矩阵的和积的实例详解
Sep 10 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实现动态柱状图改进版
2015/03/30 PHP
php实现算术验证码功能
2018/12/05 PHP
通过JAVASCRIPT读取ASP设定的COOKIE
2006/11/24 Javascript
javascript 获取页面的高度及滚动条的位置的代码
2010/05/06 Javascript
javascript轻量级模板引擎juicer使用指南
2014/06/22 Javascript
JavaScript对数组进行随机重排的方法
2015/07/22 Javascript
JavaScript代码轻松实现网页内容禁止复制(代码简单)
2015/10/23 Javascript
JS获取鼠标选中的文字
2016/08/10 Javascript
Node.js 日志处理模块log4js
2016/08/28 Javascript
JS实现侧边栏鼠标经过弹出框+缓冲效果
2017/03/29 Javascript
用Vue-cli搭建的项目中引入css报错的原因分析
2017/07/20 Javascript
JS实现监控微信小程序的原理
2018/06/15 Javascript
使用webpack打包后的vue项目如何正确运行(express)
2018/10/26 Javascript
JS常见面试试题总结【去重、遍历、闭包、继承等】
2019/08/27 Javascript
Vue使用轮询定时发送请求代码
2020/08/10 Javascript
python操作gmail实例
2015/01/14 Python
python xml.etree.ElementTree遍历xml所有节点实例详解
2016/12/04 Python
详解python string类型 bytes类型 bytearray类型
2017/12/16 Python
Python读取word文本操作详解
2018/01/22 Python
利用Anaconda简单安装scrapy框架的方法
2018/06/13 Python
python多进程(加入进程池)操作常见案例
2019/10/21 Python
浅谈Django2.0 加xadmin踩的坑
2019/11/15 Python
在Python中实现函数重载的示例代码
2019/12/12 Python
IronPython连接MySQL的方法步骤
2019/12/27 Python
Python Pillow.Image 图像保存和参数选择方式
2020/01/09 Python
pycharm 2018 激活码及破解补丁激活方式
2020/09/21 Python
python邮件中附加文字、html、图片、附件实现方法
2021/01/04 Python
加拿大在线旅游公司:Flighthub
2019/03/11 全球购物
俄罗斯品牌服装和鞋子在线商店:BRIONITY
2020/03/26 全球购物
The North Face官方旗舰店:美国著名户外品牌
2020/09/28 全球购物
使用索引(Index)有哪些需要考虑的因素
2016/10/19 面试题
大学四年职业生涯规划书范文
2014/01/02 职场文书
老师对学生的评语
2014/04/18 职场文书
致青春观后感
2015/06/09 职场文书
如何有效防止sql注入的方法
2021/05/25 SQL Server
ant design vue的form表单取值方法
2022/06/01 Vue.js