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实现把utf-8格式的文件转换成gbk格式的文件
Jan 22 Python
Python中处理时间的几种方法小结
Apr 09 Python
浅谈五大Python Web框架
Mar 20 Python
Python实现基本数据结构中栈的操作示例
Dec 04 Python
详解python 注释、变量、类型
Aug 10 Python
Python3.5迭代器与生成器用法实例分析
Apr 30 Python
python基于递归解决背包问题详解
Jul 03 Python
python实现连连看辅助之图像识别延伸
Jul 17 Python
Python devel安装失败问题解决方案
Jun 09 Python
python性能测试工具locust的使用
Dec 28 Python
详解Python中的GIL(全局解释器锁)详解及解决GIL的几种方案
Jan 29 Python
python绘制云雨图raincloud plot
Aug 05 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
使用PHPMyAdmin修复论坛数据库的图文方法
2012/01/09 PHP
php 函数使用可变数量的参数方法
2017/05/02 PHP
JavaScript 创建对象
2009/07/17 Javascript
JS鼠标事件大全 推荐收藏
2011/11/01 Javascript
JavaScript高级程序设计(第3版)学习笔记4 js运算符和操作符
2012/10/11 Javascript
体验js中splice()的强大(插入、删除或替换数组的元素)
2013/01/16 Javascript
JQuery入门——事件切换之toggle()方法应用介绍
2013/02/05 Javascript
技术男用来对妹子表白的百度首页
2014/07/23 Javascript
js实现网页标题栏闪烁提示效果实例分析
2014/11/20 Javascript
javascript框架设计读书笔记之数组的扩展与修复
2014/12/02 Javascript
jQuery ajax调用后台aspx后台文件的两种常见方法(不是ashx)
2016/06/28 Javascript
简单的JS轮播图代码
2016/07/18 Javascript
详解nodejs 文本操作模块-fs模块(五)
2016/12/23 NodeJs
纯JS单页面赛车游戏制作代码分享
2017/03/03 Javascript
Three.js利用dat.GUI如何简化试验流程详解
2017/09/26 Javascript
vue2.x集成百度UEditor富文本编辑器的方法
2018/09/21 Javascript
Vue源码探究之状态初始化
2018/11/14 Javascript
什么时候不能在 Node.js 中使用 Lock Files
2019/06/24 Javascript
JS桶排序的简单理解与实现方法示例
2019/11/25 Javascript
微信小程序实现上传照片代码实例解析
2020/08/04 Javascript
nodejs使用Sequelize框架操作数据库的实现
2020/10/21 NodeJs
[50:27]Secret vs VG 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
对python numpy数组中冒号的使用方法详解
2018/04/17 Python
django 实现电子支付功能的示例代码
2018/07/25 Python
python-opencv获取二值图像轮廓及中心点坐标的代码
2019/08/27 Python
谈谈python垃圾回收机制
2020/09/27 Python
让IE支持HTML5的方法
2012/12/11 HTML / CSS
HTML5 虚拟键盘出现挡住输入框的解决办法
2017/02/14 HTML / CSS
寻找迷宫的一条出路,o通路;X:障碍
2016/07/10 面试题
Linux机考试题
2015/10/16 面试题
男方父母证婚词
2014/01/12 职场文书
淘宝客服自我总结鉴定
2014/01/25 职场文书
《小山羊和小灰兔》教学反思
2014/02/19 职场文书
七年级作文之英语老师
2019/10/28 职场文书
vue-router中hash模式与history模式的区别
2021/06/23 Vue.js
mybatis源码解读之executor包语句处理功能
2022/02/15 Java/Android