参考:https://blog.csdn.net/fengjiexyb/article/details/78075888

霍夫变换(Hough Transform)是图像处理中的一种特征提取技术,它通过一种投票算法检测具有特定形状的物体。

该过程在一个参数空间中通过计算累计结果的局部最大值得到一个符合该特定形状的集合作为霍夫变换结果。

霍夫变换于1962年由Paul Hough 首次提出[53],后于1972年由Richard Duda和Peter Hart推广使用[54],经典霍夫变换用来检测图像中的直线,

后来霍夫变换扩展到任意形状物体的识别,多为圆和椭圆.

经过几天的学习,发现各位大牛的理解方式之前都是有一些区别的,但是核心的思想没有变化,因此记录一下自己对霍夫变换直线检测的认识。

一、原理介绍:

1、对于直角坐标系中的任意一点A(x0,y0),经过点A的直线满足Y0=k*X0+b.(k是斜率,b是截距)

2、那么在X-Y平面过点A(x0,y0)的直线簇可以用Y0=k*X0+b表示,但对于垂直于X轴的直线斜率是无穷大的则无法表示。因此将直角坐标系转换到极坐标系就能解决该特殊情况。

3、在极坐标系中表示直线的方程为ρ=xCosθ+ySinθ(ρ为原点到直线的距离),如图所示:

4、如上图,假定在一个8*8的平面像素中有一条直线,并且从左上角(1,8)像素点开始分别计算θ为0°、45°、90°、135°、180°时的ρ,

图中可以看出ρ分别为1、(9√2)/2、8、(7√2)/2、-1,并给这5个值分别记一票,同理计算像素点(3,6)点θ为0°、45°、90°、135°、180°时的ρ,

再给计算出来的5个ρ值分别记一票,此时就会发现ρ = (9√2)/2的这个值已经记了两票了,

以此类推,遍历完整个8*8的像素空间的时候ρ = (9√2)/2就记了5票, 别的ρ值的票数均小于5票,

所以得到该直线在这个8*8的像素坐标中的极坐标方程为 (9√2)/2=x*Cos45°+y*Sin45°,到此该直线方程就求出来了。

(PS:但实际中θ的取值不会跨度这么大,一般是PI/180)。

cvHoughLines()直线检测中代码的疑惑

rho :(0,0)到直线的距离分辨率,rho的正负判定:Y轴截距大于0的均为正,Y轴截距小于0则rho为负。theta为直线与Y轴负方向的夹角,以Y轴负轴为起始轴,逆时针旋转到直线的角度。

代码如下:

import cv2 as cv

import numpy as np

def line_detection(image):

gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)

edges=cv.Canny(gray,50,150,apertureSize=3)

# rho=1,半径的步长??

# theta:偏转角度,threshold:寻找canny中幅值>200的点

# 出现的是霍夫空间的图r,theta

lines=cv.HoughLines(edges,rho=1,theta=np.pi/180,threshold=150) #返回列表

for line in lines:

r,theta=line[0]

x0=r*np.cos(theta)

y0=r*np.sin(theta)

x1 = int(x0 - 1000 * np.sin(theta))

y1 = int(y0 + 1000 * np.cos(theta))

x2 = int(x0 + 1000 * np.sin(theta))

y2 = int(y0 - 1000 * np.cos(theta))

cv.line(image,(x1,y1),(x2,y2),(0,0,255),2)

cv.imshow('line_detection',image)

def line_possible_detection(image):

gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)

edges = cv.Canny(gray, 50, 150, apertureSize=3)

#minLineLength=50 ,最小线长度,50个pixel

# maxLineGap :线断了,最大能容忍多少gap的像素值

lines = cv.HoughLinesP(edges, rho=1, theta=np.pi / 180, threshold=100,

minLineLength=30,maxLineGap=10) # 返回线段,不是直线

for line in lines:

x1,y1,x2,y2=line[0]

cv.line(image, (x1, y1), (x2, y2), (0, 0, 255), 2)

cv.imshow('line_detection', image)

src=cv.imread('linedetect.jpg')

line_possible_detection(src)

cv.waitKey(0)

cv.destroyAllWindows()

结果:

霍夫直线检测python_opencv+python 霍夫直线检测相关推荐

  1. python人脸实时检测_openCV+python实现人脸实时检测

    一.静态的图像人脸检测 import numpy as np import cv2 as cv path = 'haarcascade_frontalface_default.xml' face_ca ...

  2. python 椭圆检测_opencv python中的椭圆检测

    我的图片在这里: 我正在寻找更好的解决方案或算法来检测这张照片中的椭圆形部分(盘),并在Opencv中的另一张照片中对其进行遮罩. 你能给我一些建议或解决方案吗? 我的代码是: circles = c ...

  3. python 人脸关键点检测_opencv+python+dlib人脸关键点检测、实时检测

    安装的是anaconde3.python3.7.3,3.7环境安装dlib太麻烦, 在anaconde3中新建环境python3.6.8, 在3.6环境下安装dlib-19.6.1-cp36-cp36 ...

  4. python 角点检测_opencv python Shi-Tomasi角点检测

    cv2.goodFeaturesToTrack(image, maxCorners, qualityLevel, minDistance[, corners[, mask[, blockSize[, ...

  5. python 霍夫直线变换_霍夫线变换

    目录:一.引入极坐标 二.霍夫线变换实现原理 三.图像中的霍夫线变换 四.概率霍夫变换 五.Python 例子 六.参考 Hough线变换是一种用于检测直线的变换.它最大的优点是,即使是虚线(dash ...

  6. OpenCV基于Python霍夫圆检测—基于梯度的霍夫圆检测

    基于梯度的霍夫圆检测 1. 回顾与目标 2. 基于梯度的霍夫圆检测 2.1 问题分析 2.2 基于梯度的霍夫圆检测步骤 3. 基于梯度的霍夫圆检测函数HoughCircles 3.1 函数HoughC ...

  7. OpenCV乒乓球位置检测【python】【颜色追踪】【霍夫圆】

    乒乓球位置检测 2021年3月14日 参考资料: https://www.bilibili.com/video/BV16K411W7x9 https://blog.csdn.net/weixin_44 ...

  8. 缺点 霍夫圆_基于机器视觉的磁环表面缺陷检测研究

    基于机器视觉的磁环表面缺陷检测研究 [摘要]:我国是磁性材料制造生产大国,磁材生产企业众多.目前,大多数磁材生产企业仍采用传统的人工对磁材进行尺寸测量与缺陷检测.随着我国产业制造的不断转型升级,企业对 ...

  9. OpenCV中的霍夫线变换、概率霍夫线变换

    OpenCV中的霍夫线变换.概率霍夫线变换 1. 效果图 2. 原理 2.1 什么是霍夫变换? 2.2 什么是概率霍夫变换? 3. 源码 3.1 霍夫变换 3.2 概率霍夫变换 参考 这篇博客将介绍P ...

最新文章

  1. char的初始值_java从入门到放弃 各种数组的初始值?
  2. 个人思考与研究:道德经(二)
  3. 操作系统习题2—进程调度
  4. websocket 本地可以服务器断开 springboot linux_SpringBoot+WebSocket实现简单的数据推送...
  5. oracle over函数 去重,oracle over结合row_number分区进行数据去重处理
  6. 大面积召回ES8影响交付 蔚来7月仅交付837辆汽车
  7. XML与java的应用
  8. cartographer attempt to index global ‘SPARSE_POSE_GRAPH‘ (a nil value)
  9. 最省钱的方式搭建电子商务网站
  10. linux安装python的拓展包,linux 安装python拓展包pexpect
  11. 【图像去噪】基于matlab小波变换+Contourlet变换+PCA图像去噪【含Matlab源码 610期】
  12. stm32通讯协议编写源码_STM32连接TFT-LCD
  13. java itex 打印pdf_Java使用iTextPDF生成PDF文件的实现方法
  14. SharePoint CAML In Action——Part II
  15. 上架商品的html页面,上架页面.html
  16. GB/T 20984-2022《信息安全技术 信息安全风险评估方法》解读
  17. 浪潮飞龙系列国产服务器
  18. Access2007实用教程pdf
  19. 落地零售智能体,百联集团全力打造面向未来的数字化商业体
  20. 16s rRNA微生物分析报告如何获得关键和有用分析

热门文章

  1. python基础-变量运算符(3)
  2. mysql主从出现异常,处理方法
  3. Acronis移动方案(四)
  4. Android Studio第三十四期 - git企业级应用命令
  5. canvas-绘制矩形-读书笔记
  6. 导入eclipse工程到Android Studio中
  7. pandas groupby
  8. ffmpeg 解码rtp方法
  9. java使用线程求素数和1000个0~0.9随机数_求素数(多线程练习题)
  10. python3的星期函数_calendar在python3时间中有哪些常用函数?怎么用?