OpenCV 霍夫变换

这篇博客详细介绍了OpenCV中的霍夫变换,包括霍夫直线变换的两个函数cv2.HoughLines()和cv2.HoughLinesP(),以及霍夫圆环变换的函数cv2.HoughCircles()。通过实例解释了每个函数的参数和用法。
摘要由CSDN通过智能技术生成



        霍夫变化是一种在图像中寻找直线、圆形以及其他简单形状的方法。霍夫变换采用类似于投票的方式来获取当前图像内的形状集合,该变换由 Paul Hough(霍夫)1962 年首次提出。最初霍夫变换只能用于检测直线,经过发展后,霍夫变换不仅能识别直线,还能识别其他简单的图形结构,常见的有圆、椭圆等。


一、霍夫直线变换

    OpenCV 提供了函数 cv2.HoughLines()和函数 cv2.HoughLinesP()用来实现霍夫直线变换。

1. cv2.HoughLines()

    OpenCV 提供了函数 cv2.HoughLines() 用来实现霍夫直线变换,该函数要求所操作的源图像是一个二值图像,所以在进行霍夫变换之前要先将源图像进行二值化,或者进行 Canny 边缘检测。

函数 cv2.HoughLines() 的语法格式为:

    lines = cv2.HoughLines(image, rho, theta, threshold)

▪ image 是输入图像,即源图像,必须是8位的单通道二值图像。如果是其他类型的图像,再进行霍夫变换之前,需要将其修改为指定格式
▪ rho 为以像素为单位的距离r的进度。一般情况下,使用的进度是1
▪ theta 为角度θ的精度。一般情况下,使用的精度是π/180,表示要搜索所有可能的角度
▪ threshold 是阈值。阈值越小,就会得到较多的直线;阈值较大,就会得到较小的直线
▪ 返回值 lines 中的每一个元素都是一对浮点数,表示检测到的直线的参数,即(r,θ),是numpy.ndarray类型

   函数cv2.HoughLines() 检测到的图像中的直线而不是线段,因此检测到的直线是没有端点的。所以,我们在进行霍夫直线变换时所绘制的直线都是穿越整幅图像的。

代码如下(示例):

import cv2
import numpy as np
img = cv2.imread("12.png")  
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) # 转为灰度图 
edge = cv2.Canny (gray, 50, 150) # 画边框
lines=cv2.HoughLines(edge,1,np.pi/180,50) 
for line in lines:
    rho, theta = line[0]
    a = np.cos(theta)
    b =
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值