美文网首页
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直线、圆检测

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