霍夫变换

系列文章目录

第二章:霍夫变换


© Fu Xianjun. All Rights Reserved.


 

一、霍夫变换是什么?

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

二、使用步骤

1.引入库

代码如下(示例):

import cv2

import numpy as np

2.1读入数据

代码如下:

HoughLines

import cv2

import numpy as np

 

img = cv2.imread("shape.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 = np.sin(theta)

    x0 = rho * a

    y0 = rho * b

    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,255,0),2)

cv2.imshow("img",img)

cv2.imshow("gray",gray)

cv2.imshow("edges",edges)

cv2.waitKey(0)

cv2.destroyAllWindows()

3.1效果图展示

2.2读入数据:

代码如下(HoughLinesP):

import cv2

import numpy as np

 

img = cv2.imread("shape.png")#读取原图

#轮廓检测算法检测出轮廓

gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

edges = cv2.Canny(gray,50,150)

 

minLineLength = 10

maxLineGap = 30

lines = cv2.HoughLinesP(edge,1,np.pi/180,10,minLineLength,maxLineGap)

#画线

for line in lines:

    x1,y1,x2,y2 = line[0]

    cv2.line(img,(x1,y1),(x2,y2),(0,255,0),2)

   

cv2.imshow("img",img)

cv2.imshow("gray",gray)

cv2.imshow("edges",edges)

cv2.waitKey(0)

cv2.destroyAllWindows()

3.2效果图展示:

2.3读入数据:

代码如下(HoughCircles):

import cv2

import numpy as np

img = cv2.imread("shape.png")#读取原图

#轮廓检测算法检测出轮廓

gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

edge = cv2.Canny(gray,50,100)

#投射到Hough空间进行形状检测

circles = cv2.HoughCircles(edges,cv2.HOUGH_GRADIENT,1,30,\

                          param1=40,param2=20,minRadius=5,maxRadius=100)

#画图

if not circles is None:

    #转化为int

    circles = np.uint16(np.around(circles))

    for circle in circles:

        x,y,r = circle[0]

        #画圆

        cv2.circle(img,(x,y),r,(0,0,255),2)

cv2.imshow("img",img)

cv2.imshow("gray",gray)

cv2.imshow("edges",edges)

cv2.waitKey(0)

cv2.destroyAllWindows()

3.3效果图展示:

 

 


总结

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值