opencv中标准Hough变换检测出的直线参数

 在图像处理中用到了opencv的函数检测图像中的直线,当时对于获取的直线参数有一点点误解。

    首先,简单的介绍下Opencv中的hough变换:

    Opencv支持两种不同形式的hough变换:标准hough变换和累积概率hough变换。opencv中用同一个函数 cvHoughLines2( ...)来访问这两个算法。对于详细的部分这里不是介绍的重点,我这里只是想说下我在具体实现中遇到的一些问题。

                                                       

   (1) cvHoughLines2( ...) 返回的倾斜角的理解。

    我这里要讨论的是标准hough变换中返回的line[1],我们知道其表示直线的倾斜角

    起初我获得函数返回的倾斜角theta时,相当然的以为当theta = PI /2时,直线是垂直的,显然是不对的,直线水平时,极坐标下,theta才为垂直角,以后要小心。

 

    (2)hough变换直线检测思想。

    hough直线变换的基本理论是二值图像中的任何点都可能是一些候选直线集合的一部分,所选的参数方式是每一行代表极坐标中的一个点,并且隐含的直线是通过象征点的,垂直于原点到此点的半径(  《学习opencv》)

    我想这里要强调的是从图像中的一个个像素点出发,寻找每个点成为直线一部分的可能,再把这条线上可能的点连起来形成直线。所以在实际中,不用担心当一条线出现凹陷或是弯曲度时,会一点都检测不出直线的问题。会检测出直线,只是不是一条完整长度直线,而是断断续续重叠相近的很多直线。

原图

opencv中标准Hough变换检测出的直线参数 - 淸風逐尘 ㄣ  - 我的博客

hough直线检测

opencv中标准Hough变换检测出的直线参数 - 淸風逐尘 ㄣ  - 我的博客

我们这里可以从图像中清楚的看到,检测到的直线并不是一条从图像左端到右端的完整直线,而是很多小的直线,很接近,相连接。

 

    (3)关于line[0] 和line[1]的问题。

    选择不同形式的hough变换直线检测类型,line[0]和line[1]表示的意思是不同的。这里两种形式的hough检测方法是通过函数cvHoughLines2的的参数method来区分的。

    method可以是CV_HOUGH_STANDRD ( 标准hough)  和 CV_HOUGH_PROBABILISTIC(概率累积hough)

     (i)在标准hough中,对于返回的每条直线:

            float* line = ( float* ) cvGetSeqElem( lines,i)  

            line[ 0 ] 表示矢量长度(rho_x来表示)                     line[1]表示直线的倾斜角(theta_x来表示)

 

     (ii)在概率hough变换中,line[0]  和line[1]表示返回直线的两个端点


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值