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 13 Python
Python使用PDFMiner解析PDF代码实例
Mar 27 Python
深入解答关于Python的11道基本面试题
Apr 01 Python
Python学习教程之常用的内置函数大全
Jul 14 Python
python实现决策树分类算法
Dec 21 Python
Python递归实现汉诺塔算法示例
Mar 19 Python
安装python及pycharm的教程图解
Oct 10 Python
django实现模板中的字符串文字和自动转义
Mar 31 Python
django API 中接口的互相调用实例
Apr 01 Python
python多进程使用函数封装实例
May 02 Python
Python如何快速找到多个字典中的公共键(key)
Apr 29 Python
python运行脚本文件的三种方法实例
Jun 25 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
《星际争霸重制版》兵种对比图鉴
2020/03/02 星际争霸
一个ORACLE分页程序,挺实用的.
2006/10/09 PHP
浅析虚拟主机服务器php fsockopen函数被禁用的解决办法
2013/08/07 PHP
php实现和c#一致的DES加密解密实例
2017/07/24 PHP
PHP实现防盗链的方法分析
2017/07/25 PHP
PHPUnit测试私有属性和方法功能示例
2018/06/12 PHP
ie下动态加态js文件的方法
2011/09/13 Javascript
CSS(js)限制页面显示的文本字符长度
2012/12/27 Javascript
Jquery实现遮罩层的方法
2015/06/08 Javascript
JS中使用变量保存arguments对象的方法
2016/06/03 Javascript
JS不用正则验证输入的字符串是否为空(包含空格)的实现代码
2016/06/14 Javascript
JavaScript判断数组是否存在key的简单实例
2016/08/03 Javascript
vue2.0数据双向绑定与表单bootstrap+vue组件
2017/02/27 Javascript
详解Vue 普通对象数据更新与 file 对象数据更新
2017/04/26 Javascript
JS对象序列化成json数据和json数据转化为JS对象的代码
2017/08/23 Javascript
vue仿element实现分页器效果
2018/09/13 Javascript
Element-ui自定义table表头、修改列标题样式、添加tooltip、:render-header使用
2019/04/11 Javascript
gulp构建小程序的方法步骤
2019/05/31 Javascript
js数据类型转换与流程控制操作实例分析
2019/12/18 Javascript
Python设计模式之MVC模式简单示例
2018/01/10 Python
python merge、concat合并数据集的实例讲解
2018/04/12 Python
Python使用pickle模块报错EOFError Ran out of input的解决方法
2018/08/16 Python
学习和使用python的13个理由
2019/07/30 Python
解决django 向mysql中写入中文字符出错的问题
2020/05/18 Python
浅谈tensorflow 中的图片读取和裁剪方式
2020/06/30 Python
OpenCV4.1.0+VS2017环境配置的方法步骤
2020/07/09 Python
Python numpy矩阵处理运算工具用法汇总
2020/07/13 Python
MADE荷兰:提供原创设计师家具
2018/04/03 全球购物
Happy Socks英国官网:购买五颜六色的袜子
2020/11/03 全球购物
锐步香港官方网上商店:Reebok香港
2020/11/05 全球购物
模具设计与制造专业应届生求职信
2013/10/18 职场文书
家长会主持词
2014/03/26 职场文书
党组织领导班子整改方案
2014/10/25 职场文书
学习型家庭事迹材料
2014/12/20 职场文书
子女赡养老人协议书
2016/03/23 职场文书
让人瞬间清醒的句子,句句经典,字字如金
2019/07/08 职场文书