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中的atexit模块
Mar 07 Python
Python决策树和随机森林算法实例详解
Jan 30 Python
用python实现对比两张图片的不同
Feb 05 Python
django2用iframe标签完成网页内嵌播放b站视频功能
Jun 20 Python
python爬虫之自动登录与验证码识别
Jun 15 Python
详解Django模版中加载静态文件配置方法
Jul 21 Python
python输出带颜色字体实例方法
Sep 01 Python
python实现将两个文件夹合并至另一个文件夹(制作数据集)
Apr 03 Python
Python爬虫headers处理及网络超时问题解决方案
Jun 19 Python
解决PyCharm IDE环境下,执行unittest不生成测试报告的问题
Sep 03 Python
python中的垃圾回收(GC)机制
Sep 21 Python
C++和python实现阿姆斯特朗数字查找实例代码
Dec 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
flash用php连接数据库的代码
2011/04/21 PHP
zf框架的Filter过滤器使用示例
2014/03/13 PHP
教大家制作简单的php日历
2015/11/17 PHP
php函数传值的引用传递注意事项分析
2016/06/25 PHP
JS(jQuery)实现聊天接收到消息语言自动提醒功能详解【提示“您有新的消息请注意查收”】
2019/04/16 PHP
JS常用正则表达式总结
2013/11/12 Javascript
jQuery使用height()获取高度需要注意的地方
2014/12/13 Javascript
使用coffeescript编写node.js项目的方法汇总
2015/08/05 Javascript
Kendo Grid editing 自定义验证报错提示的解决方法
2016/11/18 Javascript
JavaScript实现的可变动态数字键盘控件方式实例代码
2017/07/15 Javascript
使用Vue父子组件通信实现todolist的功能示例代码
2019/04/11 Javascript
[30:51]DOTA2上海特级锦标赛主赛事日 - 3 胜者组第二轮#1Liquid VS MVP.Phx第一局
2016/03/04 DOTA
[01:07:46]完美世界DOTA2联赛循环赛 Magma vs IO BO2第二场 11.01
2020/11/02 DOTA
Python的re模块正则表达式操作
2016/05/25 Python
python解析基于xml格式的日志文件
2017/02/25 Python
利用python打开摄像头及颜色检测方法
2018/08/03 Python
python实现字符串和字典的转换
2018/09/29 Python
python assert的用处示例详解
2019/04/01 Python
简单瞅瞅Python vars()内置函数的实现
2019/09/27 Python
python实现的读取网页并分词功能示例
2019/10/29 Python
使用 Python 读取电子表格中的数据实例详解
2020/04/17 Python
解决windows上安装tensorflow时报错,“DLL load failed: 找不到指定的模块”的问题
2020/05/20 Python
python有几个版本
2020/06/17 Python
Python函数__new__及__init__作用及区别解析
2020/08/31 Python
Django websocket原理及功能实现代码
2020/11/14 Python
利用Python实现学生信息管理系统的完整实例
2020/12/30 Python
详解移动端HTML5页面端去掉input输入框的白色背景和边框(兼容Android和ios)
2016/12/15 HTML / CSS
大学毕业生的自我鉴定
2013/11/30 职场文书
证婚人搞笑证婚词
2014/01/10 职场文书
高中历史教学反思
2014/02/08 职场文书
党建工作整改措施
2014/10/28 职场文书
党的群众路线教育实践活动个人对照检查材料(乡镇)
2014/11/05 职场文书
重温入党誓词主持词
2015/06/29 职场文书
2016继续教育培训学习心得体会
2016/01/19 职场文书
SpringBoot读取Resource下文件的4种方法
2021/07/02 Java/Android
Python 使用 Frame tkraise() 方法在 Tkinter 应用程序中的Frame之间切换
2022/04/24 Python