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,霍夫线变换
0
投稿
猜你喜欢
在SQL Server计算机上运行病毒扫描软件
2009-01-19 14:38:00
Python代码实现列表分组计数
2022-11-03 07:58:38
解决Keyerror ''acc'' KeyError: ''val_acc''问题
2022-09-05 11:28:12
一文详解Python中的行为验证码验证功能
2023-04-18 02:00:56
yolov5特征图可视化的使用步骤
2022-07-22 01:25:40
PHP生成sitemap.xml地图函数
2024-06-05 09:23:16
Python实现读取及写入csv文件的方法示例
2021-12-29 16:41:31
Python模块搜索路径代码详解
2021-07-11 10:37:17
Javascript的动态增加类的实现方法
2023-10-15 03:03:25
Golang中的panic之避免和处理程序中的异常情况
2024-02-20 10:22:49
Python编程基础之构造方法和析构方法详解
2022-02-26 02:38:03
python中安装django模块的方法
2023-08-27 13:30:21
MySQL数据库中对前端和后台进行系统优化
2009-01-04 13:39:00
菜鸟课堂:MSSQL的安全设置问题解答
2009-10-29 13:22:00
实例演示在SQL中启用全文检索
2011-10-01 14:01:37
sqlserver 存储过程分页(按多条件排序)
2024-01-23 15:56:31
python统计中文字符数量的两种方法
2022-11-16 00:24:08
golang组件swagger生成接口文档实践示例
2023-09-19 11:29:39
sql带分隔符的截取字符串示例
2024-01-13 04:52:12
ORM Django 终端打印 SQL 语句实现解析
2023-08-30 04:56:39