OpenCV学习-P40 霍夫变换

OpenCV学习-P40 霍夫变换

霍夫变换

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在笛卡尔坐标系下,直角坐标空间下的点对应霍夫空间中的直线,直角坐标中共线的两点对应霍夫空间中两条直线的交点,三个共线的点对应霍夫空间三条线的交点,所以,反过来说,霍夫空间两条直线的交点可以表示直角空间中共线的两点,即可以表示一条直线。但是遇到下图的三个点垂直组成x=2的这条直线,需要转换到极坐标系求解。
在这里插入图片描述
在这里插入图片描述
所以,只需要求得霍夫空间的交点位置,即可得到原坐标系(直角坐标系)下的直线
在这里插入图片描述
在这里插入图片描述

霍夫直线检测

在这里插入图片描述
在这里插入图片描述
霍夫直线检测过程:先对图像做canny类的边缘检测得到边缘所有的点,然后将这些点都转化为霍夫空间的曲线,然后再求霍夫空间中曲线相交最多的点。上方说的ρθ矩阵就是用来控制精度,如果想要检测所有角度的直线,那么θ为180;若想要精度达到像素级别,那么ρ需要和图像的对角线距离相等

img = cv.imread(r'.\\20220822162647.jpg',1)
gray=cv.cvtColor(img,cv.COLOR_BGR2RGB)
edges = cv.Canny(gray,50,150)
#2 霍夫变换直线检测
lines = cv2.HoughLines(edges,0.8,np.pi/180,150)
#3 将检测的线绘制在图像上
for line in lines:
    rho,theta = line[0]
    a = np.cos(theta)
    b = np.sin(theta)
    x0=a*rho
    y0=b*rho
    #将直线延长显示
    x1= int(x0 +1000*(-b))
    y1= int(y0 +1000*(a))
    x2 = int(x0 - 1000 * (-b))
    y2 = int(y0 - 1000 * (a))
    cv.line(img,(x1,y1),(x2,y2),(255,0,0))
plt.imshow(edges)
plt.imshow(img[:,:,::-1])
plt.show()

2 霍夫圆检测

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值