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字符编码判断方法分析
Jul 01 Python
dataframe设置两个条件取值的实例
Apr 12 Python
基于python list对象中嵌套元组使用sort时的排序方法
Apr 18 Python
Python对多属性的重复数据去重实例
Apr 18 Python
Python一个简单的通信程序(客户端 服务器)
Mar 06 Python
python中的协程深入理解
Jun 10 Python
python实现字符串完美拆分split()的方法
Jul 16 Python
django 自定义过滤器(filter)处理较为复杂的变量方法
Aug 12 Python
Django认证系统实现的web页面实现代码
Aug 12 Python
pytorch 中pad函数toch.nn.functional.pad()的用法
Jan 08 Python
Python字符串split及rsplit方法原理详解
Jun 29 Python
Django celery异步任务实现代码示例
Nov 26 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/11/12 PHP
PHP简单读取xml文件的方法示例
2017/04/20 PHP
Laravel学习教程之本地化模块
2017/08/18 PHP
Valerio 发布了 Mootools
2006/09/23 Javascript
JS获取dom 对象 ajax操作 读写cookie函数
2009/11/18 Javascript
jQuery简单实现日历的方法
2015/05/04 Javascript
js实现固定显示区域内自动缩放图片的方法
2015/07/18 Javascript
JS HTML5实现拖拽移动列表效果
2020/08/27 Javascript
浅谈jQuery效果函数
2016/09/16 Javascript
windows下vue-cli及webpack搭建安装环境
2017/04/25 Javascript
微信小程序本地缓存数据增删改查实例详解
2017/05/24 Javascript
vue toggle做一个点击切换class(实例讲解)
2018/03/13 Javascript
Vue实现6位数密码效果
2018/08/18 Javascript
JavaScript中引用vs复制示例详析
2018/12/06 Javascript
layui 上传文件_批量导入数据UI的方法
2019/09/23 Javascript
[53:44]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Magma BO3 第一场 1月31日
2021/03/11 DOTA
举例详解Python中threading模块的几个常用方法
2015/06/18 Python
python开发之IDEL(Python GUI)的使用方法图文详解
2015/11/12 Python
Python黑魔法Descriptor描述符的实例解析
2016/06/02 Python
apache部署python程序出现503错误的解决方法
2017/07/24 Python
详解多线程Django程序耗尽数据库连接的问题
2018/10/08 Python
使用python 打开文件并做匹配处理的实例
2019/01/02 Python
python中的colorlog库使用详解
2019/07/05 Python
tensor和numpy的互相转换的实现示例
2019/08/02 Python
Python如何把多个PDF文件合并代码实例
2020/02/13 Python
Keras中 ImageDataGenerator函数的参数用法
2020/07/03 Python
Pycharm 设置默认解释器路径和编码格式的操作
2021/02/05 Python
超酷炫 CSS3垂直手风琴菜单
2016/06/28 HTML / CSS
美国在线鲜花速递:ProFlowers
2017/01/05 全球购物
中国茶叶、茶具一站式网上购物商城:醉品茶城
2018/07/03 全球购物
美国战术品牌:5.11 Tactical
2019/05/01 全球购物
外企财务年会演讲稿
2014/01/03 职场文书
个人对照检查材料思想汇报
2014/09/26 职场文书
司法工作人员群众路线对照检查材料思想汇报
2014/09/30 职场文书
保密工作整改报告
2014/11/06 职场文书
python使用shell脚本创建kafka连接器
2022/04/29 Python