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之编写简单乘法口诀表实现代码
Feb 27 Python
jupyter安装小结
Mar 13 Python
使用XML库的方式,实现RPC通信的方法(推荐)
Jun 14 Python
Python数据结构之栈、队列的实现代码分享
Dec 04 Python
详解Python做一个名片管理系统
Mar 14 Python
python如何保证输入键入数字的方法
Aug 23 Python
Python TKinter如何自动关闭主窗口
Feb 26 Python
Django ForeignKey与数据库的FOREIGN KEY约束详解
May 20 Python
Python:__eq__和__str__函数的使用示例
Sep 26 Python
Python字符串对齐方法使用(ljust()、rjust()和center())
Apr 26 Python
OpenCV-Python实现怀旧滤镜与连环画滤镜
Jun 09 Python
Python中的pprint模块
Nov 27 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安全开发 添加随机字符串验证,防止伪造跨站请求
2013/02/14 PHP
php设计模式之命令模式的应用详解
2013/05/21 PHP
PHP的mysqli_rollback()函数讲解
2019/01/23 PHP
PHP实现与java 通信的插件使用教程
2019/08/11 PHP
一段好玩的JavaScript代码
2006/12/01 Javascript
一个js封装的不错的选项卡效果代码
2008/02/15 Javascript
js实现双向链表互联网机顶盒实战应用实现
2011/10/28 Javascript
jQuery Tools tab使用介绍
2012/07/14 Javascript
javascript中获取元素标签中间的内容的实现方法
2016/10/08 Javascript
js中json处理总结之JSON.parse
2016/10/14 Javascript
微信小程序 定义全局数据、函数复用、模版等详细介绍
2016/10/27 Javascript
jquery ajax后台返回list,前台用jquery遍历list的实现
2016/10/30 Javascript
JavaScript 数据类型详解
2017/03/13 Javascript
Three.js 再探 - 写一个微信跳一跳极简版游戏
2018/01/04 Javascript
javascript数据结构之多叉树经典操作示例【创建、添加、遍历、移除等】
2018/08/01 Javascript
Javascript实现鼠标移入方向感知
2020/06/24 Javascript
Python操作json数据的一个简单例子
2014/04/17 Python
Python中dictionary items()系列函数的用法实例
2014/08/21 Python
Python创建xml的方法
2015/03/10 Python
Python中Django框架下的staticfiles使用简介
2015/05/30 Python
Python实例一个类背后发生了什么
2016/02/09 Python
python: 自动安装缺失库文件的方法
2018/10/22 Python
Python流程控制常用工具详解
2020/02/24 Python
Python dict和defaultdict使用实例解析
2020/03/12 Python
python安装dlib库报错问题及解决方法
2020/03/16 Python
如何用python批量调整视频声音
2020/12/22 Python
pycharm进入时每次都是insert模式的解决方式
2021/02/05 Python
CSS3实现可爱的小黄人动画
2016/07/11 HTML / CSS
Canvas 像素处理之改变透明度的实现代码
2019/01/08 HTML / CSS
回门宴答谢词
2014/01/13 职场文书
综合实践教学反思
2014/01/31 职场文书
写好自荐信需做到的5要点
2014/03/07 职场文书
婚宴邀请函
2015/01/30 职场文书
2015年毕业生自荐信范文
2015/03/24 职场文书
2016年会开场白台词
2015/06/01 职场文书
2016年学校安全教育月活动总结
2016/04/06 职场文书