opencv-Hough 直线变换

Hough 直线变换是一种在图像中检测直线的技术。它通过在极坐标空间中表示图像中的直线,将直线检测问题转换为参数空间的累加问题。OpenCV 提供了 cv2.HoughLines()cv2.HoughLinesP() 函数来执行 Hough 直线变换。

cv2.HoughLines()

lines = cv2.HoughLines(image, rho, theta, threshold)

参数说明:

  • image: 输入的二值图像,通常是通过边缘检测算法(如Canny)得到的。
  • rho: 极坐标中的像素距离精度。
  • theta: 极坐标中的角度精度,通常以弧度表示。
  • threshold: 累加平面中的阈值,只有累加值大于该阈值的直线才会被检测到。

返回值:

  • lines: 检测到的直线的参数。每行表示检测到的一条直线,包括极径(rho)和角度(theta)。

cv2.HoughLinesP()

lines = cv2.HoughLinesP(image, rho, theta, threshold, minLineLength, maxLineGap)

除了上述参数外,cv2.HoughLinesP() 还包括以下两个参数:

  • minLineLength: 最小直线长度,小于该长度的直线会被排除。
  • maxLineGap: 直线之间允许的最大间隙,小于该间隙的直线将被连接为一条直线。

以下是一个简单的示例,演示如何使用 Hough 直线变换检测图像中的直线:

import cv2
import numpy as np
import matplotlib.pyplot as plt# 读取图像并转换为灰度
img = cv2.imread( r"C:\Users\mzd\Desktop\opencv\2.jpg")
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# 边缘检测
edges = cv2.Canny(gray, 50, 150)# 执行 Hough 直线变换
lines = cv2.HoughLines(edges, 1, np.pi/180, 100)# 在原图上绘制检测到的直线
for line in lines:rho, theta = line[0]a = np.cos(theta)b = np.sin(theta)x0 = a * rhoy0 = b * rhox1 = int(x0 + 1000 * (-b))y1 = int(y0 + 1000 * (a))x2 = int(x0 - 1000 * (-b))y2 = int(y0 - 1000 * (a))cv2.line(img, (x1, y1), (x2, y2), (0, 0, 255), 2)# 显示原图和检测到的直线
plt.figure(figsize=(10, 5))plt.subplot(121), plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
plt.title('Original Image with Hough Lines'), plt.axis('off')plt.subplot(122), plt.imshow(edges, cmap='gray')
plt.title('Canny Edge Detection'), plt.axis('off')plt.show()

在这里插入图片描述

在这个示例中,我们首先读取了一幅图像,将其转换为灰度图像,然后使用Canny边缘检测算法得到图像的边缘。接着,使用 cv2.HoughLines() 函数进行 Hough 直线变换,并在原图上绘制检测到的直线。最后,通过 Matplotlib 显示原图和边缘检测结果。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/209637.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【AGC】云存储服务端使用方法

【集成准备】 1、Python环境配置 下载Python和PyCharm并安装。 ​ 使用安装的python本身作为解释器。 ​ 安装AGC Python SDK。 ​云存储包安装完成。 ​ 2、AGC环境配置 在AGC创建项目和应用 ​ 开通云存储服务。 返回项目设置界面,选择Server SDK 页签…

Redis高可用之主从复制及哨兵模式

一、Redis的主从复制 1.1 Redis主从复制定义 主从复制是redis实现高可用的基础,哨兵模式和集群都是在主从复制的基础之上实现高可用; 主从复制实现数据的多级备份,以及读写分离(主服务器负责写,从服务器只能读) 1.2 主从复制流…

系统中正在运行的进程数量和等待运行时间的可运行进程数量计算猜测

vmstat的r输出是包含正在运行和等待运行时间的可运行进程的数量。 ps r的输出中是只包含正在运行的进程,于是通过“ ps r |awk ‘{if (NR >1) print $0}’ |wc -l ”可以统计出正在运行中的进程的数量。 那么根据上面的结果,等待运行时间的进程的…

创建vue项目体验

文章目录 使用vue-cli创建vue项目创建出的项目目录结构配置router 运行问题router未找到eslint报错 首页显示单页面内容替换 使用vue-cli创建vue项目 安装vue-cli,创建基本项目 选择步骤 一般创建成功后,提示使用下面的指令运行demo npm run serve创建…

docker compose搭建渗透测试vulstudy靶场示例

前言 渗透测试(Penetration test)即网络安全工程师/安全测试工程师/渗透测试工程师通过模拟黑客,在合法授权范围内,通过信息搜集、漏洞挖掘、权限提升等行为,对目标对象进行安全测试(或攻击)&am…

人物血条的制作_unity基础开发教程

人物血条的制作 场景创建导入素材血条制作血量控制代码部分 场景创建 随便创建一个地板、一个胶囊体,搭建一个简易的场景,我这里就继续使用前面文章创建的场景 导入素材 在unity编辑器中选择Window,点击Asset Store 点击Search online 在搜…

CVE-2022-21661

简介 CVE-2022-21661是一个与WordPress相关的漏洞,涉及到SQL注入问题。该漏洞主要源于WordPress的WQ_Tax_Query类中的clean_query函数,可能允许攻击者通过控制传递给该函数的数据来控制生成的SQL查询,从而执行任意的SQL代码。 当WordPress的…

C语言运算符详解

详细介绍了C语言表达式、算术运算符、赋值运算符、关系运算符、条件结构、逻辑运算符、位运算符的语法和使用方法,并讨论了运算符的优先级。 1、表达式与算术运算符 在C语言中,表达式是一个类似数学中的算式,表达式由变量、字面值、常量、运…

Visual NLP:图像信息自动提取的未来

本文旨在以简单的方式解释 Visual NLP 的关键概念,让你了解 Visual NLP 的含义、它的用例是什么、如何使用它以及为什么它是构建自动提取管道的未来 。 NSDT在线工具推荐: Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在…

nvm切换版本之后npm用不了

原因是 nvm只给你安了对应的node没给你安装对应的node版本的npm 解决办法如下 1找到你安装的node版本号 然后去官网下载对应的版本包 这个网址就是node官网的版本列表 Index of /download/release/ 2下载后解压 把根目录这俩复制到自己的nvm安装目录下 还有那个node_modul…

SpringBoot+SSM项目实战 苍穹外卖(1)

目录 产品原型与技术选型后端环境搭建Git版本控制IDEA中运行sql脚本文件nginx反向代理和负载均衡完善登录功能 导入接口文档SwaggerSwagger常用注解 产品原型与技术选型 管理端原型图: 用户端原型图: 餐饮企业内部员工使用。 主要功能有: 模块描述登录…

租车系统开发/多功能租车平台微信小程序源码/汽车租赁系统源码/汽车租赁小程序系统

源码介绍: 多功能租车平台微信小程序源码,作为汽车租赁、摩托车租车平台系统源码,是小程序系统。基于微信小程序的汽车租赁系统源码。 开发环境及工具: 大等于jdk1.8,大于mysql5.5,idea(eclip…