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根据经纬度计算距离示例
Feb 16 Python
Python中static相关知识小结
Jan 02 Python
Python基础之函数的定义与使用示例
Mar 23 Python
python初学者,用python实现基本的学生管理系统(python3)代码实例
Apr 10 Python
Django 表单模型选择框如何使用分组
May 16 Python
OpenCV搞定腾讯滑块验证码的实现代码
May 18 Python
Python流行ORM框架sqlalchemy安装与使用教程
Jun 04 Python
详解python pandas 分组统计的方法
Jul 30 Python
pandas 像SQL一样使用WHERE IN查询条件说明
Jun 05 Python
详解Python中的进程和线程
Jun 23 Python
解决pycharm下载库时出现Failed to install package的问题
Sep 04 Python
使用Python开发冰球小游戏
Apr 30 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
Windows7下PHP开发环境安装配置图文方法
2010/05/20 PHP
如何用phpmyadmin设置mysql数据库用户的权限
2012/01/09 PHP
smarty中改进truncate使其支持中文的方法
2016/05/30 PHP
php爬取天猫和淘宝商品数据
2018/02/23 PHP
在 PHP 和 Laravel 中使用 Traits的方法
2019/11/13 PHP
JS代码同步文本框内容的实例方法
2013/07/12 Javascript
详解JavaScript的AngularJS框架中的表达式与指令
2016/03/05 Javascript
浅谈window.onbeforeunload() 事件调用ajax
2016/06/29 Javascript
JS禁止查看网页源代码的实现方法
2016/10/12 Javascript
js 实现一些跨浏览器的事件方法详解及实例
2016/10/27 Javascript
浅谈DOM的操作以及性能优化问题-重绘重排
2017/01/08 Javascript
Bootstrap jquery.twbsPagination.js动态页码分页实例代码
2017/02/20 Javascript
jQuery EasyUI 折叠面板accordion的使用实例(分享)
2017/12/25 jQuery
微信小程序数据存储与取值详解
2018/01/30 Javascript
JS动画定时器知识总结
2018/03/23 Javascript
解决layui上传文件提示上传异常,实际文件已经上传成功的问题
2018/08/19 Javascript
如何解决React官方脚手架不支持Less的问题(小结)
2018/09/12 Javascript
使用 vue 实现灭霸打响指英雄消失的效果附demo
2019/05/06 Javascript
layui的select联动实现代码
2019/09/28 Javascript
Vue+element+cookie记住密码功能的简单实现方法
2020/09/20 Javascript
js闭包的9个使用场景
2020/12/29 Javascript
[14:19]2018年度COSER大赛-完美盛典
2018/12/16 DOTA
python中logging库的使用总结
2017/10/18 Python
Python OpenCV处理图像之滤镜和图像运算
2018/07/10 Python
在linux下实现 python 监控usb设备信号
2019/07/03 Python
Python实现微信小程序支付功能
2019/07/25 Python
Flask框架学习笔记之路由和反向路由详解【图文与实例】
2019/08/12 Python
python 实现视频 图像帧提取
2019/12/10 Python
python统计字符的个数代码实例
2020/02/07 Python
Django 自定义权限管理系统详解(通过中间件认证)
2020/03/11 Python
python开发前景如何
2020/06/11 Python
H5仿微信界面教程(一)
2017/07/05 HTML / CSS
英国旅游额外服务市场领导者:Holiday Extras(机场停车场、酒店、接送等)
2017/10/07 全球购物
捷克汽车配件和工具销售网站:TorriaCars
2018/02/26 全球购物
本科毕业论文答辩稿
2015/06/23 职场文书
导游经典开场白——导游词
2019/04/17 职场文书