opencv实战项目二十五:复杂背景下的直线提取

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、简介
  • 二,算法实现:
    • 2.1 中值滤波去噪
    • 2.2滤波图像取反并提取直线
    • 2.3 二值图细化
    • 2.4 对细化后的直线进行霍夫变换


前言

在当今计算机视觉领域,直线提取作为图像处理的一项基本任务,广泛应用于工业检测、道路识别、建筑测量等多个场景。然而,在实际应用中,复杂多变的背景往往给直线提取带来了极大挑战。本文将围绕OpenCV这一强大的计算机视觉库,探讨如何在复杂背景下实现高效的直线提取。


一、简介

本次提取直线的图片为下图:
在这里插入图片描述
如图所示,图片中充满复杂的椒盐噪声实现直线提取所需的流程为图像去噪,清除图像噪点,霍夫直线拟合提取图像中的直线,形态学细化提取直线骨架,再次拟合提取出干净的直线。

二,算法实现:

2.1 中值滤波去噪

代码如下:

img = cv2.imread('test.png')
cv2.imshow('src', img)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
blur = cv2.medianBlur(gray, 3)
cv2.imshow('blur',blur)

在这里插入图片描述

2.2滤波图像取反并提取直线

滤波图像取反,然后使用HoughLinesP(累计概率霍夫变换)检测直线。图像取反原因是HoughLinesP是在黑色背景中找白色直线,这样效果更好,并将检测到的所有直线绘制在图像上,让直线特征更加密集。


blur = cv2.bitwise_not(blur)
cv2.imshow('bitwise_not',blur)
cv2.waitKey(0)temp = np.zeros(blur.shape, np.uint8)
# Detect and draw lines
lines = cv2.HoughLinesP(blur, 1, np.pi/180, 10, minLineLength=50, maxLineGap=30)for line in lines:for x1, y1, x2, y2 in line:cv2.line(temp, (x1, y1), (x2, y2), (255, 255, 255), 2)

二值化取反后的图像:
在这里插入图片描述
绘制后的图像:
在这里插入图片描述

2.3 二值图细化

temp[temp==255] = 1
skeleton = morphology.skeletonize(temp)
thin = skeleton.astype(np.uint8)*255
cv2.imshow("thin",thin)

效果:
在这里插入图片描述

2.4 对细化后的直线进行霍夫变换

lines = cv2.HoughLinesP(thin, 1, np.pi/180, 20, minLineLength=50, maxLineGap=30)
print(len(lines))  for line in lines:for x1, y1, x2, y2 in line:cv2.line(img, (x1, y1), (x2, y2), (0, 0, 255), 2)

最终效果:
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

超越想象的声音修复——iZotope RX 11,重塑音频处理的未来

iZotope RX 11是一款功能强大的音频修复和增强软件,专为音频后期制作、音乐制作和内容创作而设计。以下是其主要功能和用途的详细概述: iZotope RX 11 苹果Mac软件下载 iZotope RX 11 Windows软件下载 主要功能 智能降噪与修复: RX 11配备了…

ARM相关概念

ARM课程大纲 ARM相关的基本概念 机器码 计算机能够识别由1和0组成的编码格式 汇编:将汇编文件转换为二进制文件(.bin/.elf) 汇编指令 是一条具备特殊功能的指令 编译:生成汇编文件 int a 10; ------> mov r0 #10 …

Qt/C++ 了解NTFS文件系统,解析0x80 $Data属性,获取Run Lists数据列表

系列文章目录 整个专栏系列是根据GitHub开源项目NTFS-File-Search获取分区所有文件/目录列表的思路。 具体的如下: Qt/C 了解NTFS文件系统,了解MFT(Master File Table)主文件表(一) 介绍NTFS文件系统,对比通过MFT(Master File Tab…

springboot中小学数字化教学资源管理平台

基于springbootvue实现的中小学数字化教学资源管理平台 (源码L文ppt)4-078 第4章 系统设计 4.1 功能模块设计 系统整体模块分为管理员、教师和学生三大用户角色,整体功能设计图如下所示: 图4-1 系统整体功能图 4.2 数据库设计 4.2.1 E-R模…

工业交换机故障快速排查的方法有哪些

在现代工业自动化的环境中,工业交换机作为网络连接的重要设备,其稳定性和可靠性至关重要。然而,实际使用过程中难免会遇到各种故障,这对生产线和系统的正常运作造成了影响。为了有效应对这些问题,下面将介绍一些工业交…

CSRF高级防御绕过

1)回顾low级别做过csrf页面的密码重置,重复之前的操作,我们发现级别调整中级之后,报错如下 2)检查源码 进入dvwa源码,查找到checktoken: 3)在dvwa-csrf页面上,抓包 http…

前端开发者有福啦,循序渐进Vue.js 3.x前端开发实践已上线

目录 写在前面 推荐图书 推荐理由 写在最后 写在前面 好书推荐!前端开发者的福利来喽,《循序渐进Vue.js 3.x前端开发实践》,你值得拥有。 推荐图书 《循序渐进Vue.js 3.x前端开发实践》 推荐理由 《循序渐进Vue.js 3.x前端开发实践》…

介绍GPT-o1:一系列解决困难问题( science, coding, and math )的推理模型

openai o1介绍 一、官方技术报告要点剖析实验1 benchmark分析实验2:和phd比赛技术细节:Chain of Thought的使用人类偏好评估Human preference evaluationsatety技术细节:隐藏思维链为监控模型提供了机会:)openai的几点conclusion 二、官方介绍剖析 Intro…

【C语言进阶】第四节:自定义类型详解

1、结构体 1.1 结构体变量的定义和初始化 struct Point//类型声明 {int x;int y; }p1;//声明类型的同时定义变量p1struct Point p2;//定义结构体变量p2//初始化:定义变量的同时赋初值。 struct Point p3 { x, y };struct Node {int data;struct Point p;struct N…

端侧 AI 的新突破:面壁智能 MiniCPM 3.0

在人工智能领域,每一次技术的革新都可能引发一场小小的革命。 ChatGPT-3.5 曾经凭借其惊人的表现赢得了大众的关注,但如今,随着国内AI公司面壁智能推出的新端侧基座模型,人们开始重新审视端侧AI的潜力和未来。 这款名为MiniCPM …

Dockerfile全面指南:从基础到进阶,掌握容器化构建的核心工具

目录 Dockerfile全面指南:从基础到进阶,掌握容器化构建的核心工具 引言 一、什么是 Dockerfile 二、Dockerfile 的基本结构 三、Dockerfile 的常见配置项 1、多阶段构建 (Multi-stage Builds) 2、缓存优化 3、合并 RUN 命令 四、Dockerfile 使用…

C盘太臃肿了用这招一键给C盘瘦身 快速释放C盘空间

C盘太臃肿了用这招一键给C盘瘦身 快速释放C盘空间。我们的电脑不知不觉的就爆满了,这个主要的原因就是各种垃圾文件堆积,时间用得越久,垃圾堆积得越多,这样我们的C盘空间就被蚕食了,空间越来越小,变得越来越…

干货分享:为什么stable diffusion训练用ddpm, 采样用ddim呢?

前言 回忆一下DDPM,实质上它的推导过程应是如下的: 其中, 是单纯的高斯分布的推导,相当于一个序列过程的归纳法推导。 在DDPM中采用的是[贝叶斯公式]。 而过程则是用对进行一个估测,也就是用前向过程反过来对进行一个…

sql语法学习:关键点和详细解释

学习SQL语法是掌握数据库操作的基础。以下是SQL语法的一些关键点和详细解释: 1. SQL基础 SQL(Structured Query Language)是一种用于管理和操作关系型数据库的标准语言。它主要包括以下几个部分: 数据定义语言(DDL&…

探索Mem0:AI的智能记忆层

文章目录 探索Mem0:AI的智能记忆层背景介绍Mem0是什么?如何安装Mem0?简单使用方法应用场景常见问题及解决方案总结 ![ 探索Mem0:AI的智能记忆层 背景介绍 在人工智能的世界里,记忆是个性化体验的关键。想象一下&…

结构设计模式 -装饰器设计模式 - JAVA

装饰器设计模式 前言 这是我在这个网站整理的笔记,有错误的地方请指出,关注我,接下来还会持续更新。 作者:神的孩子都在歌唱 一. 介绍 百度百科:装饰模式指的是在不必改变原类文件和使用继承的情况下,动态地扩展一个对…

只需5分钟!掌握学术写作的核心逻辑!

人工智能的广泛应用中,ChatGPT 已被证明是一种极具潜力的语言模型,其功能涵盖多个领域,显示出强大的适应性。在 GPT-4 架构的推动下,ChatGPT 正在彻底改变我们与文本驱动的人工智能的交互模式。 在学术界,学术写作至关…

【测试】——Selenium API (万字详解)

📖 前言:本文详细介绍了如何利用Selenium进行Web自动化测试,包括定位元素(如cssSelector和xpath)、常用操作函数(如点击、输入等)、窗口管理、键盘鼠标事件和浏览器导航,以及处理弹窗…

实用小工具——多标签页插件Office Tab介绍

Office Tab引入选项卡式用户界面,增强了Microsoft Office使用体验。软件界面,可以设置你喜欢的标签类型。 安装后office界面会新增一个办公标签栏,立面有各功能说明。 最常用的是这个标签切换功能。 安装也很简单,选择对应位数安装…

知识产权实缴出资是否合法

知识产权实缴出资是否合法 近年来,随着知识产权在企业价值中的重要性日益凸显,知识产权实缴出资作为一种新兴的出资方式,逐渐受到社会各界的关注。然而,关于知识产权实缴出资是否合法的问题,一直是企业和投资者关注的焦…