opencv python 直线检测_Python-OpenCV学习(九)直线圆检测

直线和圆检测:

Hough变换是直线和形状检测背后的原理基础,它是由Richard Duda和Peter Huart发明,他们是对PaulHough在10世纪60年代早期所做的工作的拓展:

直线检测:

直线检测通过HoughLines和HoughLinesP函数完成:

HoughLines函数用的是标准的Hough变换。

HoughLinesP函数使用的是概率Hough变换。

HoughLinesP称为概率版本的Hough变换的原因是它只通过分析点的子集并估计这些点属于一条直线的概率,是对标准Hough变换的一个优化,执行速度回更加快:

import cv2

import numpy as np

img = cv2.imread('lines.jpg')

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

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

minLineLength = 20

maxLineGap = 5

lines = cv2.HoughLinesP(edges,1,np.pi/180,20,minLineLength,maxLineGap)

for x1,y1,x2,y2 in lines[0]:

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

cv2.imshow("edges", edges)

cv2.imshow("lines", img)

cv2.waitKey()

cv2.destroyAllWindows()

效果

设置最小直线长度和最大线段间隙也蛮重要,设置最小会消除小于长度的线段,最大间隙,大于这个值会被视为是两条直线

HoughLines输入的位一个边缘检测后的二值化图像:

HoughLinesP参数:

需要处理的图像

线段的几何表示rho和theta,一般取1和np.pi/180

阈值。低于这个阈值的线段回本忽略

-minLineLength和maxLineGap

圆检测:

OpenCV的HoughCircles函数可以用来检测圆,与使用HoughLines函数类似:

import cv2

import numpy as np

planets = cv2.imread('planet_glow.jpg')

gray_img = cv2.cvtColor(planets, cv2.COLOR_BGR2GRAY)

img = cv2.medianBlur(gray_img, 5)

cimg = cv2.cvtColor(img,cv2.COLOR_GRAY2BGR)

circles = cv2.HoughCircles(img,cv2.HOUGH_GRADIENT,1,120,

param1=100,param2=30,minRadius=0,maxRadius=0)

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

for i in circles[0,:]:

# draw the outer circle

cv2.circle(planets,(i[0],i[1]),i[2],(0,255,0),2)

# draw the center of the circle

cv2.circle(planets,(i[0],i[1]),2,(0,0,255),3)

cv2.imwrite("planets_circles.jpg", planets)

cv2.imshow("HoughCirlces", planets)

cv2.waitKey()

cv2.destroyAllWindows()

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值