python 用opencv实现霍夫线变换

作者:sakurala 时间:2021-09-14 20:18:25 

霍夫变换是一种检测任何形状的流行技术,可以检测形状,即使它被破坏或扭曲一点点.
一条线可以表示成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实现霍夫线变换

来源: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
  • asp之家 网络编程 m.aspxhome.com