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之折腾一下目录
Oct 24 Python
Python中使用Beautiful Soup库的超详细教程
Apr 30 Python
Python实现给qq邮箱发送邮件的方法
May 28 Python
python中字典(Dictionary)用法实例详解
May 30 Python
python 移除字符串尾部的数字方法
Jul 17 Python
在Python中使用gRPC的方法示例
Aug 08 Python
基于Python实现用户管理系统
Feb 26 Python
ORM Django 终端打印 SQL 语句实现解析
Aug 09 Python
PYTHON如何读取和写入EXCEL里面的数据
Oct 28 Python
python 循环数据赋值实例
Dec 02 Python
使用pickle存储数据dump 和 load实例讲解
Dec 30 Python
Python实现http接口自动化测试的示例代码
Oct 09 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中auto_prepend_file与auto_append_file用法实例分析
2014/09/22 PHP
Javascript单元测试框架QUnitjs详细介绍
2014/05/08 Javascript
点击标签切换和自动切换DIV选项卡
2014/08/10 Javascript
jquery复选框多选赋值给文本框的方法
2015/01/27 Javascript
学习JavaScript设计模式(策略模式)
2015/11/26 Javascript
简单讲解jQuery中的子元素过滤选择器
2016/04/18 Javascript
jquery实现上传文件大小类型的验证例子(推荐)
2016/06/25 Javascript
Javascript 判断两个IP是否在同一网段实例代码
2016/11/28 Javascript
微信小程序 欢迎界面开发的实例详解
2016/11/30 Javascript
jQuery的事件预绑定
2016/12/05 Javascript
JavaScript获取短信验证码(周期性)
2016/12/29 Javascript
BootStrap Table前台和后台分页对JSON格式的要求
2017/06/28 Javascript
Vue自定义指令使用方法详解
2017/08/21 Javascript
解决ie img标签内存泄漏的问题
2017/10/13 Javascript
webpack3之loader全解析
2017/10/26 Javascript
详解关于Vue2.0路由开启keep-alive时需要注意的地方
2018/09/18 Javascript
vue循环数组改变点击文字的颜色
2019/10/14 Javascript
Vue.js 无限滚动列表性能优化方案
2019/12/02 Javascript
vue实现瀑布流组件滑动加载更多
2020/03/10 Javascript
python通过BF算法实现关键词匹配的方法
2015/03/13 Python
Python中利用Scipy包的SIFT方法进行图片识别的实例教程
2016/06/03 Python
python样条插值的实现代码
2018/12/17 Python
python Pexpect 实现输密码 scp 拷贝的方法
2019/01/03 Python
Python递归函数 二分查找算法实现解析
2019/08/12 Python
浅谈pytorch中的BN层的注意事项
2020/06/23 Python
用sleep间隔进行python反爬虫的实例讲解
2020/11/30 Python
Bibloo奥地利:购买女装、男装、童装、鞋和配件
2018/10/18 全球购物
G-Form护具官方网站:美国运动保护装备
2019/09/04 全球购物
乌克兰数字设备、配件和智能技术的连锁商店:KTC
2020/08/18 全球购物
经理职责范文
2013/11/08 职场文书
高中毕业的自我鉴定
2013/12/09 职场文书
大学生自荐信
2013/12/11 职场文书
校庆活动方案
2014/03/31 职场文书
不服从上级领导安排的检讨书
2014/09/14 职场文书
消费者投诉书范文
2015/07/02 职场文书
springboot + mongodb 通过经纬度坐标匹配平面区域的方法
2021/11/01 MongoDB