OpenCV直线和圆形检测

直线检测,通过HoughLines和HoughLinesP函数进行计算,区别是:HoughLines使用标准的Hough变换,HoughLinesP使用概率Hough变换。HoughLinesP是标准Hough的优化,通过分析点的子集并估计这些点都属于一条直线的概率,计算量更少,执行更快。

import numpy
from cv2 import cv2

img = cv2.imread('C:/Users/admin/Desktop/test/1.jpg')
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)         #转换为灰度图
edges = cv2.Canny(gray,50,100)      #进行canny边缘计算
minLineLength = 20
maxLineGap = 5
lines = cv2.HoughLinesP(edges,1,numpy.pi / 180,100,minLineLength,maxLineGap)   #直线检测,保留满足要求的直线
for line in lines:
    for x1,y1,x2,y2 in line:
        cv2.line(img,(x1,y1),(x2,y2),(0,255,0),2)    #在原图上绘制提取到的直线
cv2.imshow('edges',edges)
cv2.imshow('lines',img)
cv2.waitKey()
cv2.destroyAllWindows()

圆检测,OpenCV的HoughCircles函数可用于检测圆,需要设置圆心间的最小距离和最大最小半径等限制条件。

import numpy
from cv2 import cv2

img = cv2.imread('C:/Users/admin/Desktop/test/2.png')
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
blurImg = cv2.medianBlur(gray,5)
cImg = cv2.cvtColor(blurImg,cv2.COLOR_GRAY2BGR)

circles = cv2.HoughCircles(blurImg,cv2.HOUGH_GRADIENT,1,120,param1 = 100,param2 = 30,minRadius = 50,maxRadius=200)
circles = numpy.uint16(numpy.around(circles))

for i in circles[0,:]:
    cv2.circle(img,(i[0],i[1]),i[2],(0,255,0),2)
    cv2.circle(img,(i[0],i[1]),2,(0,0,255),3)

cv2.imshow('circle',img)
cv2.waitKey()
cv2.destroyAllWindows()

直线检测,首先是提取canny边缘,再跟据canny边缘图像进一步分析,根据定义的参数提取出直线。

原图:

canny边缘:

直线检测结果(绿色)叠加原图:

圆检测效果

原图:

效果图:

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TheMatrixs

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值