美文网首页
OpenCV+Python直线、圆检测

OpenCV+Python直线、圆检测

作者: 音符纸飞机 | 来源:发表于2018-07-15 16:22 被阅读671次

霍夫变换

应用范围

只要能用数学方程表示的形状,都能用霍夫变换检测到

直线检测

直线数学方程:y=mx+c或者\rho=xcos\theta+ysin\theta,其中\rho是原点到直线的距离,\theta是距离与x轴的顺时针夹角。当直线在原点上方时,\rho取负数,\theta仍在[0,180^{\circ}]

直线方程
任何直线都可以由一组 霍夫直线

统计概率霍夫变换 Probabilistic Hough Transform

霍夫变换的优化

算法
  1. 随机获取边缘图像上的前景点,映射到极坐标系画曲线;
  2. 当极坐标系里面有交点达到最小投票数,将该点对应x-y坐标系的直线L找出来;
  3. 搜索边缘图像上前景点,在直线L上的点(且点与点之间距离小于maxLineGap的)连成线段,然后这些点全部删除,并且记录该线段的参数(起始点和终止点),当然线段长度要满足最小长度;
  4. 重复1. 2. 3.。
cv2.HoughLinesP(binary_img, rho, theta, threshold, minLineLength=None,maxLineGap=None)
# minLineLength 最短的直线长度
# maxLineGap 同一条直线上相邻的像素最远不超过的值
lines = cv2.HoughLinesP(edges,1,np.pi/180,100)

for line in lines:
    x1, y1, x2, y2 = line[0]
    cv2.line(img, (x1, y1), (x2, y2), (0, 255, 0), 1)

概率霍夫变换

霍夫圆检测

cv2.HoughCircles(gray_img, method, dp, min_dist, circles=None, param1=None, param2=None, minRadius=None, maxRadius=None)

"""
# method
#     HOUGH_GRADIENT 
#     HOUGH_MULTI_SCALE
#     HOUGH_PROBABILISTIC 
#     HOUGH_STANDARD
# dp : 累加器的精度 一半设为1
# min_dist: 圆心之间的最短距离,这是一个经验值。这个大了,那么多个圆就是被认为一个圆。
# param1, param2: CV_HOUGH_GRADIENT中的两个阈值. param1用于canny边缘检测时的max阈值 
#                param2设定了原检测的精度,值越大检测出的圆越少    
param2:根据你的图像中的圆大小设置,当这张图片中的圆越小,那么此值就设置应该被设置越小。
当设置的越小,那么检测出的圆越多,在检测较大的圆时则会产生很多噪声。所以要根据检测圆的大小变化
""" 
实例
img = cv2.imread('laugh.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
gray = cv2.bilateralFilter(gray, 21, 75, 75)
circles = cv2.HoughCircles(gray, cv2.HOUGH_GRADIENT, 1, 20,
                           param1=100, param2=20, minRadius=0)
circles = np.uint16(np.around(circles))
for i in circles[0, :]:
    # draw the outer circle
    cv2.circle(img, (i[0], i[1]), i[2], (0, 255, 0), 2)
    # draw the center of the circle
    cv2.circle(img, (i[0], i[1]), 2, (0, 0, 255), 3)
cv2.imshow("houghCircle", img)
霍夫圆检测

相关文章

  • OpenCV+Python直线、圆检测

    霍夫变换 应用范围 只要能用数学方程表示的形状,都能用霍夫变换检测到 直线检测 直线数学方程:或者,其中是原点到直...

  • 2019-06-03 OpenCV学习

    21直线检测 霍夫直线变换用来做直线检测,前提条件是边缘检测已完成。 22圆检测 霍夫圆变换原理: 从平面坐标到极...

  • opencv+python -- 霍夫直线检测

    1.霍夫变换(Hough Transform) 霍夫变换是图像处理中从图像中识别几何形状的基本方法之一,应用很广泛...

  • 霍夫检测(直线,圆)

    数学原理:霍夫变换 1.直线检测 数学原理(个人观点):简单来说,就是把直角坐标与极坐标之间做变换,通过点映射直线...

  • opencv 直线和圆检测

  • opencv+python -- 霍夫圆检测

    .霍夫圆变换的基本原理和霍夫线变换原理类似,只是点对应的二维极径、极角空间被三维的圆心和半径空间取代。在标准霍夫圆...

  • 椭圆检测

    Hough变换检测椭圆 附带matlab与opencv代码 QT+opencv学习笔记(5)——霍夫直线检测、圆检...

  • opencv-python 霍夫直线检测、圆检测

    霍夫直线检测具体参考https://www.jianshu.com/p/9c0a9451f754 圆检测具体参考h...

  • OpenCV-Python学习(十六):霍夫变换

    目录: 1.什么是霍夫变换? 2.OpenCV中的霍夫线变换-->直线检测 3.OpenCV中的霍夫圆变换-->圆...

  • 2.霍夫变换

    霍夫变换是检测直线或者圆的一种比较简单的方法。霍夫变换检测直线是比较简单的,做完以后是一个二维平面上的许多曲线,通...

网友评论

      本文标题:OpenCV+Python直线、圆检测

      本文链接:https://www.haomeiwen.com/subject/dncppftx.html