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
投稿

猜你喜欢

  • Python调用腾讯云短信服务发送手机短信

    2021-10-07 16:55:38
  • asp 在线备份与恢复sql server数据库的代码

    2010-07-31 18:52:00
  • 你应当了解的5个CSS3新技术

    2009-02-11 13:01:00
  • XMLHTTPRequest的属性和方法简介

    2007-12-18 18:42:00
  • Facebook基础的信息架构图

    2008-04-01 09:46:00
  • python中Requests请求的安装与常见用法

    2022-08-15 20:36:35
  • python入门之井字棋小游戏

    2021-12-11 11:35:36
  • 页面链接方式的统一性

    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
  • CSS Hack经验总结

    2008-05-01 13:13:00
  • python日志模块loguru详解

    2023-10-23 20:50:08
  • 浅谈numpy.where() 的用法和np.argsort()的用法说明

    2022-03-12 01:52:23
  • django中的auth模块与admin后台管理方法

    2022-11-22 00:01:21
  • asp在sql server2000中新建帐号和给帐号权限代码

    2008-01-29 13:46:00
  • Python捕获异常堆栈信息的几种方法(小结)

    2022-02-19 08:01:30
  • asp之家 网络编程 m.aspxhome.com