【OpenCv 4 Python 3.7】直线检测

opencv基础59-霍夫变换原理讲解及示例-cv2.HoughLines()->(直线,圆形检测) 霍夫变换是一种在图像中寻找直线、圆形以及其他简单形状的方法。霍夫变换采用类似于投票的方式来获取当前图像内的形状集合,该变换由 Paul Hough(霍夫)于 1962 年首次提出。最初的霍夫变换只能用于检测直线,经过发展后,霍夫变换不仅能够识别直线,还能识别其他简单的图形结构,常见的有圆、椭圆等。 阅读详情


直线检测可以通过OpenCV的HoughLines和HoughLinesP函数来完成,它们仅有的差别是:第一个函数使用标准的Hough变换,第二个函数使用概率Hough变换,即只通过分析点的子集并估计这些点都属于一条直线的概率,这在计算速度上更快。

霍夫直线检测的两种方法

一:HoughLines方法

cv2.HoughLines函数输出的是[float, float]形式的ndarray,其中每个值表示检测到的线(ρ , θ)中浮点点值的参数。

第一个参数image:是canny边缘检测后的图像

第二个参数rho和第三个参数theta:对应直线搜索的步长。在本例中,函数将通过步长为1的半径和步长为π/180的角来搜索所有可能的直线。

最后一个参数threshold:是经过某一点曲线的数量的阈值,超过这个阈值,就表示这个交点所代表的参数对(rho, theta)在原图像中为一条直线

二:HoughLinesP概率霍夫变换

(是加强版)使用简单,效果更好,检测图像中分段的直线(而不是贯穿整个图像的直线)
第一个参数是需要处理的原图像,该图像必须为cannay边缘检测后的图像;

第二和第三参数:步长为1的半径和步长为π/180的角来搜索所有可能的直线

第四个参数是阈值,概念同霍夫变换

第五个参数:minLineLength-线的最短长度,比这个线短的都会被忽略。

第六个参数:maxLineGap-两条线之间的最大间隔,如果小于此值,这两条线就会被看成一条线。
这个函数的返回值就是直线的起点和终点。

代码实现:

import cv2 as cv
import numpy as np


def line_detection(image):
    #转换成灰度图像
    gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)
    #canny边缘检测 apertureSize是sobel算子大小,只能为1,3,5,7
    edges = cv.Canny(gray, 50, 150, apertureSize=3)
    #cv2.HoughLines函数输出的是[float, float]形式的ndarray,
    # 其中每个值表示检测到的线(ρ , θ)中浮点点值的参数。
    #函数将通过步长为1的半径和步长为π/180的角来搜索所有可能的直线
    lines = cv.HoughLines(edges, 1, np.pi/180, 200)
    for line in lines:
        print(type(lines)) #多维数组
        rho, theta = line[0]  #获取极值ρ长度和θ角度
        a = np.cos(theta) #获取角度cos值
        b = np.sin(theta) #获取角度sin值
        x0 = a * rho #获取x轴值
        y0 = b * rho
        #求出直线的四个点
        x1 = int(x0+1000*(-b)) #获取这条直线最大值点x1
        y1 = int(y0+1000*(a))  #获取这条直线最大值点y1
        x2 = int(x0-1000*(-b))  #获取这条直线最小值点x2
        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)
    #HoughLinesP 函数的返回值就是直线的起点和终点。
    lines = cv.HoughLinesP(edges, 1, np.pi/180, 100, minLineLength=50, maxLineGap=10)
    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)


print("--------- Python OpenCV Tutorial ---------")
src = cv.imread("D:/vcprojects/images/sudoku.png")
cv.namedWindow("input image", cv.WINDOW_AUTOSIZE) #创建GUI窗口,形式为自适应
cv.imshow("input image", src) #通过名字将图像和窗口联系
line_detect_possible_demo(src)

cv.waitKey(0) #等待用户操作,里面等待参数是毫秒,我们填写0,代表是永远,等待用户操作
cv.destroyAllWindows()  #销毁所有窗口

HoughLines结果:

在这里插入图片描述

HoughLinesP结果:

在这里插入图片描述

[图解]cv2.HoughLines() 和 cv2.HoughLinesP()原理和代码 理论 如上图,左边a,b固定可以确定一条直线,线是() 组成的集合. 下面从xy空间变化到ab空间,此时给定一个绿点()可以确定一条绿色的线,给定一个蓝点 ()可以确定一条蓝色的线,绿线和蓝线相交的点就是左边确定红线的参数a和b.此时xy空间里红线上的其他点,变换到ab空间必过蓝绿线相交点. 下面把ab换成rho和theta. rho = x cos (theta) + y sin (theta) 这里面rho是原点到直线的垂直距离,和theta是由这条垂直线和逆时针测量的水平轴形...... 阅读详情

相关推荐

霍夫变换——HoughLines、HoughLinesP和HoughCircles

霍夫变换类似投票方式来获取当前图像内的形状集合!

weixin_45769285的博客 7675

HoughLinesP( )函数详解

此函数在HoughLines的基础上末尾加了一个代表Probabilistic(概率)的P,表明它可以采用累计概率霍夫变换(PPHT)来找出二值图像中的直线。 void HoughLinesP(InputArray image, OutputArray lines, double rho, double theta, int threshold, double minLineLength=0,

jirryzhang的博客 2万+

python-opencv直线检测+直线拟合+计算直线间距离

python-opencv直线检测+直线拟合+计算偏移量 计算边界直线与x坐标轴的距离=首先canny边缘检测——>直线检测——>直线拟合——>计算与x坐标轴的距离。 直接上代码: import cv2 #opencv读取的格式是BGR import numpy as np vc = cv2.VideoCapture('D:/Desktop/duizhong/fangzhen.mp4') if vc.isOpened(): #判断能否读取 open, frame =

weixin_41921564的博客 1万+

HoughLinesP参数设置(看完还不会你砍死我!!!)

一、我是个标题 1、随便在PPt画个图如下(1602*750): 2、测试代码 #include<iostream> #include<opencv2/opencv.hpp> using namespace std; using namespace cv; int detect(cv::Mat img) { cv::Mat can_img, gray_img; cv::cvtColor(img, gray_img, CV_BGR2GRAY); cv::Mat ..

Pichairen 1万+

python+opencv图像处理(提取矩形方框 提取颜色 滤波 轮廓检测 直线检测)

一、依赖 如果你的python环境没有这些包,则需要安装 pip install numpy \ opencv-python \ pillow 二、使用指南 1、基本信息 近期由于项目需要,需要使用python的opencv库处理图像,在下面的代码中使用了很多cv2的库函数,对这些函数进行了封装,可以直接拷贝调用.项目地址 该部分有两个文件构成 main.py 和  replace.py 运行...

若风的博客 6万+

OpenCV-Python教程(9、使用霍夫变换检测直线)

相比C++而言,Python适合做原型。本系列的文章介绍如何在Python中用OpenCV图形库,以及与C++调用相应OpenCV函数的不同之处。这篇文章介绍在Python中使用OpenCV的霍夫变换检测直线。

sunny2038的专栏 6万+

win10+Python3.7.3+OpenCV3.4.1入门学习(十二 图像轮廓)————12.5 轮廓拟合

Python版本是Python3.7.3,OpenCV版本OpenCV.3.4.1,开发环境为PyCharm 12.5 轮廓拟合 在计算轮廓时,可能并不需要实际的轮廓,而仅需要一个接近于轮廓的近似多边形。OpenCV提供了多种计算轮廓近似多边形的方法。 本节的部分程序使用了绘图函数,这些函数在第19章中有详细的介绍,这里不再赘述。 12.5.1 矩形包围框 函数cv2.boundingRect()...

qq_951274168的博客 1086

利用OpenCV-python进行直线检测

最近需要利用摄像头对细小的偏移做矫正,由于之前的界面工具是用 PyQT 所写,在当前的工具中加入摄像头矫正程序,也打算用 python 直接完成。OpenCV 简介:Python 处理图像有 OpenCV 库。OpenCV 可以运行在 Linux,windows,macOS 上,由 C 函数和 C++ 类构成,用于实现计算机图像、视频的编辑,应用于图像识别、运动跟踪、机器视觉等领域。Open......

panfengzjz的博客 2万+

python用opencv实现直线检测和计算交点

需求描述 在一张CAD图上需要知道墙角,并且标注出来,设想先检测出两面墙壁,即两条直线,然后计算线的交点即可 解决过程 首先要在python里面opencv库,之后读取图片,然后是直线检测前常规性的转灰度图、高斯模糊、边缘检测,再用获夫变换检测直线。 # -*- coding: UTF-8 -*- import cv2 import numpy as np #图片路径 imgPath="x...

qq_33004317的博客 1万+

OpenCV | 直线拟合fitline函数(Python)

简介 之前做直线拟合时,自己写了一个利用最小二乘做直线拟合的程序,但是由于直线检测的误差比较大,拟合的效果并不好。个人不知道是什么原因,因此想尝试更改一下直线拟合的算法,后来找到了OpenCV中的fitline函数,也是一个距离最小化函数,它完全包含了最小二乘法。由于网上没有找到相关的与python有关的资源,这里总结如下。 1. 函数调用 python3中fitline函数的调用形式如下: im...

lovetaozibaby的博客 3万+

Python+OpenCV实现车道线检测代码部分

实验时 使用的是python3.7+cv2,直接在Anaconda上面直接安装,代码在Jupyter上跑的,图片是老师给的(—.—) 经过各个滤波后,划定区域 : 最终合成的图像 : 最后实际上是先把篮框框内的两条线截出来,之后使用最小二乘拟合出两条直线,然后将其与原图合并,形成车道线的检测,当时写这个实验参考了许多优快云上,简书上,知乎上以及Github的一些开源代码,这...

Dr.sen的博客 6896

在Python中使用OpenCV进行直线检测

1. 引言 在图像处理中,直线检测是一种常见的算法,它通常获取n个边缘点的集合,并找到通过这些边缘点的直线。其中用于直线检测,最为流行的检测器是基于霍夫变换的直线检测技术。 2. 霍夫变换 霍夫变换是图像处理中的一种特征提取方法,可以识别图像中的几何形状。它将在参数空间内进行投票来决定其物体形状,通过检测累计结果找到一极大值所对应的解,利用此解即可得到一个符合特定形状的参数。 在使用霍夫变换侦测直线前,须先利用边缘检测算法来减少图像的数据量、剔掉不相关的信息,保留图像中重要的结构特征。 3. 举个栗子 3.

sgzqc的专栏 8232

让 AI 学会“慢思考”:MCP Sequential Thinking 深度部署与使用指南

摘要: MCP Sequential Thinking 是一种让AI具备"慢思考"能力的技术,通过动态调整思维路径解决复杂问题。本文详细介绍了在Windows、macOS和Linux系统下的部署方法,包括环境准备、配置文件修改等步骤。该技术通过"产生想法-评估需求-修正路径"的循环机制,显著提升AI在代码设计、数学证明等复杂任务中的表现。文章还提供了验证安装方法、使用示例和常见问题解答,帮助开发者解锁AI的深层思考能力。(149字)

weixin_43236925的博客 1913

opencv 直线拟合

一、话说直线拟合霍夫直线检测容易受到线段形状与噪声的干扰而失真,这个时候我们需要另辟蹊径,通过对图像进行二值分析,提取骨架,对骨架像素点拟合生成直线,这种做法在一些场景下非常有效,而且效果还比较好。前面已经讲过霍夫变换,这里就不再叙述,直接上干货。二、距离变换距离变换是二值图像处理与操作中常用手段,在骨架提取,图像窄化中常有应用。距离变换的结果是得到一张与输入图像类似的灰度图像,但是灰度值只出现在...

zhangjunp3的博客 1万+

高校学籍管理系统(SQL Server数据库课程设计)

摘要: 高校的管理工作是一项复杂且系统化的工作。而随着当代社会积极响应国家“科教兴国”的战略。高校建设规模和招生人数每年均高不下,庞大的学生群体对高校的管理工作带来了巨大的挑战。而对学生的学籍管理工作更是高校管理工作的一个重要环节。 面对高校学生学籍信息如此庞大的数据群,如采用传统的管理模式,管理工作的效率不仅低下,而且数据错误的发生率相对较高,还会产生人力和物力上的巨大开支。面对这样的情况,开发一个高校学籍管理系统就显得尤为重要。 运用高校学籍管理系统可以大大提高高校管理工作效率、方便系统维护、减小开支、

qq_52030824的博客 7万+

6轴机械臂(拟人臂+球形腕(三轴相交于一点))正逆运动学求解

1、DH坐标下机械臂参数 theta=[pi/10,pi/2,pi/4,-pi/4,pi/4,-pi/8];%关节角度 a=[0, 0.260, 0.025, 0, 0, 0];%连杆长度 d=[0, 0, 0, 0.280, 0, 0.072];%偏移距离 alpha=[pi/2, 0, pi/2, -pi/2 , pi/2, 0];%RBR型6轴机械臂 使用...

qq_33374294的博客 7886

【Python】OpenCV霍夫变换直线检测

霍夫变换(Hough Transform)是一种常用于图像处理和计算机视觉中的特征提取技术,主要用于检测特定形状,如直线、圆和椭圆等。 本文基于Python语言,记录了本人霍夫变换直线检测的学习步骤。

m0_56258468的博客 1791

Claude Code 完整使用教程(2026最新版)

《Claude Code 完整使用教程(2026最新版)》摘要: Claude Code 是 Anthropic 公司推出的智能编程工具,通过自然语言对话实现代码编写、调试和重构。本教程基于 v2.1.101 版本,涵盖安装配置、核心功能及最新特性。主要内容包括: 多平台安装方式(macOS/Linux/Windows) 桌面应用专属功能如并行会话、定时任务和语音模式 模型选择指南(Sonnet/Opus/Haiku) 快速入门示例:5分钟创建Node.js项目 核心功能:代码读写、命令执行、Git集成等

程序猿_三产 2万+

python+opencv霍夫直线、圆检测

python+opencv霍夫直线、圆检测 目录python+opencv霍夫直线、圆检测一、霍夫变换 一、霍夫变换 在笛卡尔坐标系中直线y=kx+qy=kx+qy=kx+q可以由A(x1x_1x1​,y1y_1y1​),B(x2x_2x2​,y2y_2y2​)两点确定 在该坐标系中,xxx,yyy分别为自变量和因变量,若此时我们将y=kx+qy=kx+qy=kx+q写成关于kkk,qqq的函数表达式(霍夫空间): $$$$ ...

weixin_44980490的博客 2010

初探Proxmox Datacenter Manager:统一管理多集群与单节点的利器

本文介绍了Proxmox Datacenter Manager (PDM) 这一统一管理工具,它能有效解决多套Proxmox VE环境(包括集群和单节点)管理碎片化的痛点。文章详细阐述了PDM的核心功能、安装部署步骤,并通过实战演示了如何添加单节点与整个集群,实现资源的集中监控与基础运维,为运维人员提供了高效的集中管理解决方案。

weixin_29217235的博客 162

基因组注释(Annotation)

Annotation

hgz2020的博客 6496

Python的OpenCV实现霍夫曼直线检测原理和api介绍

在OpenCV中,霍夫曼直线检测相关的函数是HoughLines和HoughLinesP, 主要介绍常用参数。HoughLines函数用于在给定二值图像中检测直线。image: 输入的二值图像,一般为边缘检测后的图像。rho: 以像素为单位的距离精度。theta: 以弧度为单位的角度精度。threshold: 累加器阈值,只有高于该阈值的交点才会被认为是直线。返回值是一个包含直线的数组,每条直线由ρ和θ表示。函数也用于在给定二值图像中检测直线,但与HoughLines不同的是,它会返回直线上的端点。

m0_64363059的博客 2579

redhawk:使用rh_setup.pl产生gsr模板

必须加的option工具会在rh_setup.pl给出提示,按照要求填写即可,另外工具会把所有填写的输入文件和信息放到rh_setup.init文件中,拷贝这个文件可在任何平级运行目录下,直接rh_setup.pl产生gsr以及run sta/dyn/em的脚本。rhsetup.pl -top top_cell_name -vdd_nets VDD 1.2 VDD2 1.2 -vss_nets VSS -frequency 100e6 (100m是默认值)更多学习内容请关注「拾陆楼」知识星球。

m0_61544122的博客 1055

opencv-python 直线检测并延长

利用Opencv中的Canny边缘检测基于HoughLinesP检测出来的直线,在适当的场景下需要延长检测出来的直线(表格提取) 原理就是中学学的直线方程的的应用. def Extend_line(x1, y1, x2, y2, x, y, flag): if flag == 1: if y1 == y2: return 0, y1, x, y...

NNU_CJ的博客 5902

基于STM32L4XX、HAL库的GC9307 TFT 液晶驱动IC驱动程序设计

GC9307是一款常用的TFT液晶驱动IC,支持240x320分辨率的RGB接口显示屏。(Master Out Slave In): 连接到STM32L4的SPI数据输出引脚(如PA7)(Serial Clock): 连接到STM32L4的SPI时钟引脚(如PA5)(Data/Command): 连接到STM32L4的GPIO引脚(如PA3)(Chip Select): 连接到STM32L4的GPIO引脚(如PA4)(Reset): 连接到STM32L4的GPIO引脚(如PA2): 分别连接到电源和地。

zhusl6688的博客 1037

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Python - Opencv 之详解直线检测算法+代码

LSD快速直线检测算法是由Rafael Grompone、Jeremie Jackbowicz、Jean-Michel Morel于2010年发表在PAMI上的文献《LSD:a Line Segment Dectctor》中提出的,该算法时间复杂度较霍夫变换低。LSD算法通过对图像局部分析,得出直线的像素点集,再通过假设参数进行验证求解,将像素点集合与误差控制集合合并,进而自适应控制误检的数量。

yohnyang的博客 6496

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

上一篇: 【OpenCv 4 Python 3.7】圆检测
下一篇: 【OpenCv 4 Python 3.7】轮廓发现
YL_python_C++_java
博客等级 码龄7年 1392粉丝 142原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值