Hough-直线和圆的检测

Hough-直线和圆的检测

1、直线检测

  1. HoughLines:使用标准的Hough变换
  2. HoughLinesP:使用概率Hough变换,之所以称之为概率版本的Hough变换是因为他只通过分析点的子集并估计这些点都属于一条直线的概率该函数的计算代价会少一些,执行会更块

HoughLines会接收一个有Canny边缘检测滤波器处理过的单通道二值图像(不一定需要Canny检测,但是一个经过去噪并只有边缘的图像当做Hough变换的输入会很不错,因此Canny滤波器是一个普遍的惯例)

HoughLinesP(edges,  1,  np.pi/180,  100,  minLineLength,  maxLineGap)的参数:

  • 需要处理的图像,(单通道的二值图像,黑白图,不是灰度图)
  • 线段的几何表示,rho和theta,一般取1和np.pi/180
  • 阈值。低于该阈值的直线会被忽略,达到阈值的直线才会被保留下来(可以理解为投票)
  • 最小的线段长度,小于该长度的直线会被消除
  • 最大的线段间隙,一条线段的间隙长度大于这个值会被视为是两条分开的直线

代码如下:

import cv2
import numpy as np


img = cv2.imread("../images/11.jpg")
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
edges = cv2.Canny(gray,50,120)

minLength = 100
maxLineGap = 5
lines = cv2.HoughLinesP(edges,1,np.pi/180,100,minLength,maxLineGap)
# 画出所有的直线
c = len(lines)-1
while c >= 0:
    for x1,y1,x2,y2 in lines[c]:
        cv2.line(img,(x1,y1),(x2,y2),(0,0,255),4)
    c -=1


cv2.imshow("edges",edges)
cv2.imshow("lines",img)
cv2.waitKey()
cv2.destroyAllWindows()

2、圆检测

HoughCircle()函数有:圆心间的最小距离、圆的最小和最大半径。

代码如下:

import  cv2
import numpy

imge = cv2.imread("../images/12.jpg")
gray = cv2.cvtColor(imge,cv2.COLOR_BGR2GRAY)
img = cv2.Canny(gray,50,120)
cv2.imshow("canny",img)
circls = cv2.HoughCircles(img,cv2.HOUGH_GRADIENT,1,120,
                          param1=100,param2=30,minRadius=0,maxRadius=0)
for i in circls[:,-1]:
    # 画出圆的边框
    cv2.circle(imge,(i[0],i[1]),i[2],(0,255,0),2)
    # 画出圆心的位置
    cv2.circle(imge, (i[0], i[1]), 2, (0, 0, 255), 2)

cv2.imshow("houghcircle",imge)
cv2.waitKey()
cv2.destroyAllWindows()

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值