python 用opencv实现霍夫线变换
作者:sakurala 时间:2021-09-14 20:18:25
霍夫变换是一种检测任何形状的流行技术,可以检测形状,即使它被破坏或扭曲一点点.
一条线可以表示成y = mx + c或参数形式,像ρ=xcosθ+ysinθ,其中ρ是从原点到直线的垂直距离,θ角是由这条垂线和水平轴以逆时针的方向形成的(这个方向取决于你如何表示坐标系统,这种表示法在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()
概率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()
来源:https://segmentfault.com/a/1190000015680544
标签:python,opencv,霍夫线变换
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
Python调用腾讯云短信服务发送手机短信
2021-10-07 16:55:38
![](https://img.aspxhome.com/file/2023/2/112122_0s.png)
asp 在线备份与恢复sql server数据库的代码
2010-07-31 18:52:00
你应当了解的5个CSS3新技术
2009-02-11 13:01:00
![](https://img.aspxhome.com/file/UploadPic/20092/11/css31-preview-80.png)
XMLHTTPRequest的属性和方法简介
2007-12-18 18:42:00
Facebook基础的信息架构图
2008-04-01 09:46:00
![](https://img.aspxhome.com/file/UploadPic/20084/1/20084194941397s.png)
python中Requests请求的安装与常见用法
2022-08-15 20:36:35
python入门之井字棋小游戏
2021-12-11 11:35:36
![](https://img.aspxhome.com/file/2023/2/123632_0s.jpg)
页面链接方式的统一性
2008-03-24 17:02:00
Python之list对应元素求和的方法
2022-12-30 20:18:00
Python封装zabbix-get接口的代码分享
2021-12-05 08:57:39
详解Python3序列赋值、序列解包
2022-04-19 05:24:51
Python中利用sqrt()方法进行平方根计算的教程
2022-09-17 13:11:25
简单了解python gevent 协程使用及作用
2021-11-27 04:05:26
css特性:空白外边距互相叠加
2010-06-21 10:53:00
![](https://img.aspxhome.com/file/UploadPic/20106/21/100530a-82s.jpg)
CSS Hack经验总结
2008-05-01 13:13:00
python日志模块loguru详解
2023-10-23 20:50:08
![](https://img.aspxhome.com/file/2023/3/115473_0s.png)
浅谈numpy.where() 的用法和np.argsort()的用法说明
2022-03-12 01:52:23
![](https://img.aspxhome.com/file/2023/7/99077_0s.png)
django中的auth模块与admin后台管理方法
2022-11-22 00:01:21
![](https://img.aspxhome.com/file/2023/4/102754_0s.png)
asp在sql server2000中新建帐号和给帐号权限代码
2008-01-29 13:46:00
Python捕获异常堆栈信息的几种方法(小结)
2022-02-19 08:01:30