opencv-python 直线检测、圆检测

直线检测:

cv2.HoughLinesP()

HoughLinesP(image, rho, theta, threshold, lines=None, minLineLength=None, maxLineGap=None) 


image: 必须是二值图像,推荐使用canny边缘检测的结果图像;
rho:线段以像素为单位的距离精度,double类型的,推荐用1.0
theta: 线段以弧度为单位的角度精度,推荐用numpy.pi/180
threshod:累加平面的阈值参数,int类型,超过设定阈值才被检测出线段,值越大,基本上意味着检出的线段越长,检出的线段个数越少。根据情况推荐先用100试试
lines:线条的输出向量。
minLineLength:线段以像素为单位的最小长度。
maxLineGap:同一方向上两条线段判定为一条线段的最大允许间隔(断裂),超过了设定值,则把两条线段当成一条线段,值越大,允许线段上的断裂越大,越有可能检出潜在的直线段
    img = cv2.imread('line_circle.png')
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    edges = cv2.Canny(gray, 50, 150, apertureSize=3)
    lines=cv2.HoughLinesP(edges,1,np.pi/180,20,None,10)
    lines=lines[:,0,:]
    for item in lines:
        x1,y1,x2,y2=item
        cv2.line(img, (x1, y1), (x2, y2), (0, 255, 0), 2)
    cv2.imshow("line_dtect",img)
    cv2.waitKey(0)

圆检测:

cv2.HoughCircles(image, method, dp, minDist, circles=None, param1=None, param2=None, minRadius=None, maxRadius=None)

image- 8位,单通道,灰度输入图像。 method- 使用检测方法。
dp - 累加器分辨率与图像分辨率的反比。例如,如果 dp= 1,则累加器具有与输入图像相同的分辨率。如果 dp = 2,则累加器的宽度和高度都是一半。
minDist -检测到的圆的中心之间的最小距离。如果参数太小,除了真正的参数外,可能会错误地检测到多个邻居圈。如果太大,可能会错过一些圈子。
circles- 找到的圆的输出向量。每个向量被编码为3元素的浮点向量 (x,y,半径)。
param1 -第一个方法特定的参数。在CV_HOUGH_GRADIENT的情况下,
两个传递给Canny()边缘检测器的阈值较高(较小的两个小于两倍)
param2 -第二种方法参数。在CV_HOUGH_GRADIENT的情况下,它是检测阶段的圆心的累加器阈值。越小,可能会检测到越多的虚假圈子。首先返回对应于较大累加器值的圈子。
minRadius -最小圆半径。
    img = cv2.imread('circle.png')
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

    circles = cv2.HoughCircles(gray, cv2.HOUGH_GRADIENT, 1, 100)
    circles = np.uint16(np.around(circles))
    for i in circles[0, :]:
        cv2.circle(img, (i[0], i[1]), i[2], (0, 255, 0), 2)
    cv2.imshow("circle_detect",img)
    cv2.waitKey(0)
    cv2.imwrite("circle_result.png",img)

reference:

Python 使用Opencv实现直线检测和圆检测

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值