007 OpenCV霍夫变换

目录

一、环境

二、霍夫变换原理

三、代码


一、环境

本文使用环境为:

  • Windows10
  • Python 3.9.17
  • opencv-python 4.8.0.74

二、霍夫变换原理

OpenCV中的霍夫变换是一种用于检测图像中直线和圆的算法。它基于图像中像素的分布情况,通过统计像素点之间的相互关系来识别出直线或圆的位置和参数。

霍夫变换的原理是利用图像中的边缘信息来检测直线或圆。在图像中,边缘信息通常表现为灰度值的变化,即相邻像素之间的灰度值差异较大。因此,霍夫变换首先需要对图像进行边缘检测,提取出边缘信息。常用的边缘检测方法有Sobel算子、Canny算子等。

对于直线检测,霍夫变换的基本思想是将图像划分为若干个小区域,然后计算每个小区域内的像素点与该区域内某条直线的关系。具体来说,对于每个小区域,霍夫变换会找到一条最佳拟合该区域内所有像素点的直线,这条直线被称为该区域的“主成分”。接下来,霍夫变换会计算每个小区域内的像素点到其主成分的距离,并统计距离小于某个阈值的像素点的数量。最后,霍夫变换会根据距离和数量的关系来确定图像中的直线位置和参数。

对于圆检测,霍夫变换的基本思想是将图像划分为若干个小区域,然后计算每个小区域内的像素点与该区域内某条圆的关系。具体来说,对于每个小区域,霍夫变换会找到一条最佳拟合该区域内所有像素点的圆,这个圆被称为该区域的“主圆”。接下来,霍夫变换会计算每个小区域内的像素点到其主圆的距离,并统计距离小于某个阈值的像素点的数量。最后,霍夫变换会根据距离和数量的关系来确定图像中的圆心位置和半径。

需要注意的是,霍夫变换只能检测图像中的直线或圆的位置和参数,而不能直接得到它们的具体形状。因此,在使用霍夫变换时,需要根据具体情况选择合适的参数和方法来提高检测的准确性和鲁棒性。

总之,霍夫变换是一种非常有用的图像处理技术,它可以帮助我们快速准确地检测图像中的直线和圆。在实际应用中,霍夫变换被广泛应用于计算机视觉、模式识别、机器视觉等领域。

三、代码

输入图像如下图,利用霍夫变换检测如图线段:

完整代码:

import cv2 as cv
import numpy as np

# 读图
img = cv.imread(cv.samples.findFile('data/sudoku.png'))
# 灰度化
gray = cv.cvtColor(img,cv.COLOR_BGR2GRAY)
# 提取canny边缘
edges = cv.Canny(gray,50,150,apertureSize = 3)
# 霍夫变换
lines = cv.HoughLines(edges,1,np.pi/180,200)
for line in lines:
    rho,theta = line[0]
    a = np.cos(theta)
    b = np.sin(theta)
    x0 = a*rho
    y0 = b*rho
    x1 = int(x0 + 1000*(-b))
    y1 = int(y0 + 1000*(a))
    x2 = int(x0 - 1000*(-b))
    y2 = int(y0 - 1000*(a))
    # 画线
    cv.line(img,(x1,y1),(x2,y2),(0,0,255),2)

cv.imwrite('houghlines3.jpg',img)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

纯CSS实现炫酷文本时钟

如图所示这是一个纯本文时钟效果,和传统的时钟不一样,没有表盘,也没有完整到每一分钟的数字表示当前时刻。 在这个时钟中,当前时间通过文本显示,显示的文本时间误差为+/- 4分钟,以明亮的颜色突出显示当前时间,而其余字母则较暗。 实际上这是一个实现很复杂的时钟,因为…

python刷题笔记1(42例题)

1. split()函数 str.split([sep [, maxsplit]]) 分割字符串,返回一个数组 2. 判断子串 # 判断子串是否在主串里面,是则输出“Yes”,否则输出“No” str1 input("子串:") str2 input("主串:") if str1 in s…

Python如何将项目直接打包为一键整合包

目录 一、准备项目 二、创建打包文件 三、创建安装脚本 四、执行安装 五、测试安装 六、常见问题与解决方案 总结 Python项目打包成一键整合包是一个比较复杂的任务,需要考虑到项目的各个方面,包括依赖项、配置文件、静态文件、数据库等等。下面是…

Flask Web开发:数据库

目录 在虚拟环境中安装Flask-SQLAlchemy: 一、配置 数据库配置示例: 二、定义模型 Role 和 User 模型代码: (1)常用的 SQLAlchemy 列类型:​编辑 (2)常用的 SQLAlchemy 列选项…

基于springboot实现冬奥会科普平台系统【项目源码+论文说明】计算机毕业设计

基于SpringBoot实现冬奥会科普平台系统演示 摘要 随着信息技术和网络技术的飞速发展,人类已进入全新信息化时代,传统管理技术已无法高效,便捷地管理信息。为了迎合时代需求,优化管理效率,各种各样的管理平台应运而生&…

vue3-响应式核心

​🌈个人主页:前端青山 🔥系列专栏:Vue篇 🔖人终将被年少不可得之物困其一生 依旧青山,本期给大家带来vue篇专栏内容:vue3-响应式核心 响应式核心 目录 响应式核心 3.1ref() 3.2computed () 3.3 reactive() 3.4 …

ESP32 MicroPython AI摄像头应用⑩

ESP32 MicroPython AI摄像头应用⑩ 1、AI摄像头应用2、移动检测(LCD显示)3、实验内容3、参考代码4、实验结果 1、AI摄像头应用 我们小车MCU支持AI(人工智能)加速,可以用于加速神经网络计算和信号处理等工作的向量指令 (vector instructions)…

一文讲明 网络调试助手的基本使用 NetAssist

我 | 在这里 🕵️ 读书 | 长沙 ⭐软件工程 ⭐ 本科 🏠 工作 | 广州 ⭐ Java 全栈开发(软件工程师) 🎃 爱好 | 研究技术、旅游、阅读、运动、喜欢流行歌曲 🏷️ 标签 | 男 自律狂人 目标明确 责任心强 ✈️公…

全球地表水年度数据集JRC Yearly Water Classification History, v1.4数据集

简介: JRC Yearly Water Classification History, v1.4是一个对全球水资源进行分类的数据集,覆盖了1984年至2019年的时间范围。该数据集是由欧盟联合研究中心(JRC)开发的,使用的数据源是来自Landsat系列卫星的高分辨率…

澳洲猫罐头如何?我亲自喂养过的优质猫罐头分享

猫罐头要符合三点:营养配方完整均衡、原料新鲜优质、生产工艺科学可靠。只有具备这些特点,才是品质上乘的猫罐头。 猫罐头的三个要素,一个都不能少。配方不均衡,营养就不足;原料不新鲜,生产出来的猫罐头就…

NX二次开发UF_CAM_ask_tool_matl_db_object 函数介绍

文章作者:里海 来源网站:里海NX二次开发3000例专栏 UF_CAM_ask_tool_matl_db_object Defined in: uf_cam.h int UF_CAM_ask_tool_matl_db_object(UF_CAM_db_object_t * db_obj ) overview 概述 This function provides the database object which is…

NameServer源码解析

1 模块入口代码的功能 本节介绍入口代码的功能,阅读源码的时候,很多人喜欢根据执行逻辑,先从入口代码看起。NameServer部分入口代码主要完成命令行参数解析,初始化Controller的功能。 1.1 入口函数 首先看一下NameServer的源码目…

长期暴露于空气污染与精神障碍存在因果关系 |UK Biobank周报(11.2)

郑老师统计课程,欢迎点击报名:Nhanes公共数据库挖掘 课程 英国生物银行(UK Biobank,UKB)是英国迄今以来规模最大的有关致病或预防疾病的基因和环境因子的信息资源库。目的是探求一些特定基因、生活方式和健康状况之间的…

BUUCTF [BJDCTF2020]鸡你太美 1

BUUCTF:https://buuoj.cn/challenges 题目描述: 得到的 flag 请包上 flag{} 提交。来源: https://github.com/BjdsecCA/BJDCTF2020 密文: 下载附件,解压得到两个.gif图片。 第一个gif图片: 第二个gif图片无法打开。…

ROS navigation栅格地图原点位置如何确定?

背景 利用ros进行导航时,生成一张栅格地图,包含gridMap.pgm和gridMap.yaml。现在想要将栅格地图及轨迹在其他应用上显示,需要确定地图的坐标系原点。 gridMap.yaml格式 image: gridMap.pgm  #文件名 resolution: 0.20000  #地图分辨率 …

第十五章---I/O(输入/输出)

15.1输入输出流 流是一组有序的数据序列,根据操作的类型,可分为输入流和输出流两种。I/O(Input/Output,(输出)流提供了一条通道程序,可以使用这条通道把源中的字节序列送到目的地。虽然 I/O 流疆盘文件存取有关,但是程序的源和目…

启动dubbo消费端过程提示No provider available for the service的问题定位与解决

文/朱季谦 某次在启动dubbo消费端时,发现无法从zookeeper注册中心获取到所依赖的消费者API,启动日志一直出现这样的异常提示 Failed to check the status of the service com.fte.zhu.api.testService. No provider available for the service com.fte…

一道简单的积分题目

题目如下图&#xff1a; 解法1&#xff1a; 解法2&#xff1a; 解法3&#xff1a; 错误做法&#xff1a; 在 x ∈ ( 0 , ∞ ) 上有 ln ⁡ x < x &#xff0c;令 f ( x ) ln ⁡ x 1 x 2 &#xff0c; g ( x ) &#xff1d; x 1 x 2 ∴ f ( x ) < g ( x ) &#x…

中贝通信-603220 三季报分析(20231120)

中贝通信-603220 基本情况 公司名称&#xff1a;中贝通信集团股份有限公司 A股简称&#xff1a;中贝通信 成立日期&#xff1a;1999-12-29 上市日期&#xff1a;2018-11-15 所属行业&#xff1a;软件和信息技术服务业 周期性&#xff1a;1 主营业务&#xff1a;通信网络技术服务…