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 29 Python
python爬虫_自动获取seebug的poc实例
Aug 05 Python
python利用OpenCV2实现人脸检测
Apr 16 Python
Tensorflow环境搭建的方法步骤
Feb 07 Python
Python 寻找局部最高点的实现
Dec 05 Python
Python with语句和过程抽取思想
Dec 23 Python
python文件处理fileinput使用方法详解
Jan 02 Python
TensorFlow dataset.shuffle、batch、repeat的使用详解
Jan 21 Python
Python中使用aiohttp模拟服务器出现错误问题及解决方法
Oct 31 Python
python中@property的作用和getter setter的解释
Dec 22 Python
使用Python爬虫爬取小红书完完整整的全过程
Jan 19 Python
总结三种用 Python 作为小程序后端的方式
May 02 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中对数据库操作的封装
2006/10/09 PHP
php结合ACCESS的跨库查询功能
2015/06/12 PHP
php中preg_replace_callback函数简单用法示例
2016/07/21 PHP
php中替换字符串函数strtr()和str_repalce()的用法与区别
2016/11/25 PHP
微信公众号实现扫码获取微信用户信息(网页授权)
2019/04/09 PHP
JavaScript 浮点数运算 精度问题
2009/10/06 Javascript
JavaScript Event学习第五章 高级事件注册模型
2010/02/07 Javascript
JQUERY1.6 使用方法四 检测浏览器
2011/11/23 Javascript
高性能Javascript笔记 数据的存储与访问性能优化
2012/08/02 Javascript
jquery中邮箱地址 URL网站地址正则验证实例代码
2013/09/15 Javascript
Javascript之this关键字深入解析
2013/11/12 Javascript
使用jquery实现的一个图片延迟加载插件(含图片延迟加载原理)
2014/06/05 Javascript
js闭包的用途详解
2014/11/09 Javascript
jQuery绑定事件监听bind和移除事件监听unbind用法实例详解
2016/01/19 Javascript
浅谈jquery中的each方法$.each、this.each、$.fn.each
2016/06/23 Javascript
Bootstrap基本样式学习笔记之按钮(4)
2016/12/07 Javascript
详谈AngularJs 控制器、数据绑定、作用域
2017/07/09 Javascript
史上最全JavaScript数组去重的十种方法(推荐)
2017/08/17 Javascript
vue+element-ui+ajax实现一个表格的实例
2018/03/09 Javascript
ES6中Set和Map数据结构,Map与其它数据结构互相转换操作实例详解
2019/02/28 Javascript
JS 获取文件后缀,判断文件类型(比如是否为图片格式)
2020/05/09 Javascript
vuex分模块后,实现获取state的值
2020/07/26 Javascript
Python和GO语言实现的消息摘要算法示例
2015/03/10 Python
举例讲解Python程序与系统shell交互的方式
2015/04/09 Python
对python中Librosa的mfcc步骤详解
2019/01/09 Python
Pytorch 保存模型生成图片方式
2020/01/10 Python
PyCharm Ctrl+Shift+F 失灵的简单有效解决操作
2021/01/15 Python
html5标记文字_动力节点Java学院整理
2017/07/11 HTML / CSS
电大自我鉴定
2013/10/27 职场文书
师范教师专业大学生职业生涯规划范文
2014/03/02 职场文书
经典演讲稿汇总
2014/05/19 职场文书
无刑事犯罪记录证明
2014/09/18 职场文书
2014年银行年终工作总结
2014/12/19 职场文书
大学三好学生主要事迹范文
2015/11/03 职场文书
2016关于预防职务犯罪的心得体会
2016/01/21 职场文书
Windows和Linux上部署Golang并运行程序
2022/04/22 Servers