1,霍夫变换
霍夫变换是图像处理中从图像中识别几何形状的基本方法之一。主要用来从图像中分离出具有某种相同特征的几何形状(如,直线,圆等)。最基本的霍夫变换是从黑白图像中检测直线(线段)。
霍夫变换最简单的是检测直线。,直线的方程表示可以由斜率和截距表示(这种表示方法,称为斜截式),如下所示:

但是这样会参数问题,垂直线的斜率不存在(或无限大),这使得斜率参数m的值接近于无限。为此,为了更好的计算,提出了Hesse normal form(Hesse法线式):

其中r是原点到直线上最近点的距离(其他人可能把这记录为ρ,下面也可以把r看成参数ρ),θ是x轴与连接原点和最近点直线之间的夹角。因此,可以将图像的每一条直线与一对参数(r,θ)相关联。这个参数(r,θ)平面有时被称为霍夫空间,用于二维直线的集合。

在图像分析上下文,边缘段的点(一个或多个)的坐标(xi,yi)在图像中是已知的,并且因此作为参数线等式中的常量,而r与θ是未知变量是我们要寻找的。如果我们绘制由(r,θ)每个定义的可能值(xi,yi),笛卡尔图像空间中的点映射到极性霍夫参数空间中的曲线(即正弦曲线)。这个点到曲线的变换是直线的霍夫变换。当在霍夫参数空间中查看时,在笛卡尔图像空间中共线的点变得很明显,因为它们产生在相同(r,θ)点相交的曲线。

该变换的结果存储在矩阵中。单元格值表示通过任意点的曲线数量。更高的单元格值变得更亮。明显的亮点是直线的霍夫参数。从这些点的位置,可以确定输入图像中两条线的图像中心的角度和距离.
源代码示例:

import cv2 as cv
import numpy as npdef line_detection(image):           #直线检测gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)edges = cv.Canny(gray, 50, 150, apertureSize=3)  #apertureSize是sobel算子窗口大小lines = cv.HoughLines(edges, 1, np.pi/180, 200) #指定步长为1的半径和步长为π/180的角来搜索所有可能的直线"""oughLines(image, rho, theta, threshold, lines=None, srn=None, stn=None, min_theta=None, max_theta=None)
第一个参数image:是canny边缘检测后的图像第二个参数rho和第三个参数theta:对应直线搜索的步长。在本例中,函数将通过步长为1的半径和步长为π/180的角来搜索所有可能的直线。最后一个参数threshold:是经过某一点曲线的数量的阈值,超过这个阈值,就表示这个交点所代表的参数对(rho, theta)在原图像中为一条直线"""for line in lines:#  print(type(lines))rho, theta = line[0]#获取极值ρ长度和θ角度a = np.cos(theta)b = np.sin(theta)x0 = a * rho  #获取x轴值y0 = b * rhox1 = int(x0+1000*(-b)) #获取这条直线最大值点x1y1 = int(y0+1000*(a))x2 = int(x0-1000*(-b))y2 = int(y0-1000*(a))#获取这条直线最小值点y2  其中*1000是内部规则cv.line(image, (x1, y1), (x2, y2), (0, 0, 255), 2) #划线cv.imshow("image-lines", image)def line_detect_possible_demo(image):     #检测出可能的线段      gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)edges = cv.Canny(gray, 50, 150, apertureSize=3)lines = cv.HoughLinesP(edges, 1, np.pi/180, 100, minLineLength=50, maxLineGap=10)"""
HoughLinesP概率霍夫变换(是加强版)使用简单,效果更好,检测图像中分段的直线(而不是贯穿整个图像的直线)
第一个参数是需要处理的原图像,该图像必须为cannay边缘检测后的图像;第二和第三参数:步长为1的半径和步长为π/180的角来搜索所有可能的直线第四个参数是阈值,概念同霍夫变换第五个参数:minLineLength-线的最短长度,比这个线短的都会被忽略。第六个参数:maxLineGap-两条线之间的最大间隔,如果小于此值,这两条线就会被看成一条线"""for line in lines:#   print(type(line))x1, y1, x2, y2 = line[0]cv.line(image, (x1, y1), (x2, y2), (0, 0, 255), 2)cv.imshow("line_detect_possible_demo", image)src = cv.imread("F:/images/morph01.png")
cv.namedWindow("input image", cv.WINDOW_AUTOSIZE)
cv.imshow("input image", src)
line_detection(src)
line_detect_possible_demo(src)
cv.waitKey(0)cv.destroyAllWindows()

OpenCV+python:霍夫变换与直线检测相关推荐

  1. 【图像处理】——Python霍夫变换之直线检测(主要是两个函数HoughlinesHoughlinesP)

    目录 一.原理(摘自<数字图像处理冈萨雷斯>) 2.Python函数 参数详解 3.效果 4.实例 一.原理(摘自<数字图像处理冈萨雷斯>) 即在xy平面上一条直线上的点在ab ...

  2. 利用霍夫变换做直线检测的原理及OpenCV代码实现

    图像处理开发需求.图像处理接私活挣零花钱,请加微信/QQ 2487872782 图像处理开发资料.图像处理技术交流请加QQ群,群号 271891601 霍夫变换的原理大家可以参考博文 霍夫变换_tie ...

  3. OpenCV标准霍夫直线检测详解

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转载自:OpenCV学堂 霍夫直线检测 对于图像来说可以从笛卡 ...

  4. 用Python实现LSD直线检测

    LSD (Line Segment Detector) 是一种用于检测图像中直线段的算法. 要在 Python 中实现 LSD 直线检测,首先需要安装 OpenCV 库.OpenCV 是一个开源的计算 ...

  5. opencv值霍夫直线检测原理

    转载于CheerM的博客园博客 霍夫变换--直线检测 考古debug,其实很久之前就解决的bug--一直忘记过来改文章-.欸 =============================原文====== ...

  6. 霍夫直线检测python_opencv+python 霍夫直线检测

    参考:https://blog.csdn.net/fengjiexyb/article/details/78075888 霍夫变换(Hough Transform)是图像处理中的一种特征提取技术,它通 ...

  7. 【OpenCv】霍夫直线检测

    文章目录 前言 1 原理 2 算法流程 3 优缺点 前言   Hough变换是实现边缘检测的一种有效方法,其基本思想是将测量空间的一点变换到参量空间的一条曲线或曲面,而具有同一参量特征的点变换后在参量 ...

  8. 霍夫变换(直线检测、圆检测)

    可以看出如果笛卡尔坐标系的点共线,这些点在霍夫空间对应的直线交于一点:这也是必然,共线只有一种取值可能. 如果不止一条直线呢?再看看多个点的情况(有两条直线): 在opencv中步骤解读: 具体步骤: ...

  9. OpenCV—python 显着性检测二

    这里只是展示一下OpenCV自带的显着性检测函数.效果都不是很好,各位可以测试一下. 需要OpenCV 3.4或更高版本 cv2.saliency.ObjectnessBING_create() cv ...

最新文章

  1. 争吵所达到的效果要_悟空:不要害怕争吵,有时候争吵一些不喜欢的事情也能创造和谐...
  2. 探究被Win7保留的100MB活动分区
  3. 鲍尔默说:你的东西再大 微软也装得下
  4. lua 多条件_【LUA】只需花费你半天时间
  5. Guava区间-Range
  6. php psr2规范,php标准规范详解
  7. 大数据时代的公共安全治理
  8. PHP伪造来源HTTP,伪造来源采集http.php
  9. ipv6的127位掩码如何表示_子网掩码为255.255.255.0代表的意思是什么?
  10. 线性代数 【22】 抽象的向量空间
  11. HDP SandBox 安装与初步配置
  12. xcode4.1自带SVN配置
  13. 计算机三级网络技术-----DHCP报文分析
  14. moments音标_moment  是什么意思_moment  的翻译_音标_读音_用法_例句_爱词霸在线词典...
  15. 统计软件简介与数据操作
  16. 如何让计算机显示隐藏的文件夹,隐藏的文件夹如何显示 win7与xp系统显示隐藏文件夹的设置方法...
  17. BUUCTF之Ping Ping Ping
  18. Python数据可视化matplotlib(一)—— 图表的基本元素
  19. R语言小实践---云词分析
  20. vue2中取消严格检查模式/关闭语法检查

热门文章

  1. 2022-2028年中国婴儿用品市场投资分析及前景预测报告
  2. centos7下selinux永久关闭
  3. 【AJAX】Ajax学习总结
  4. 解决plsql中文显示问号(???)问题
  5. LeetCode简单题之差的绝对值为 K 的数对数目
  6. H.264 Video Codec速度和质量
  7. 先进机器人系统中的关键技术
  8. Windows 安装adb
  9. 线性布局上的一个小错误
  10. DOS命令行操作MySQL常用命令