图像线段检测几种方法

这篇具有很好参考价值的文章主要介绍了图像线段检测几种方法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、LSD算法

当我将OpenCV提升到4.1.0时,LineSegmentDetector(LSD)消失了。
OpenCV-contrib有一个名为FastLineDetector的东西,如果它被用作LSD的替代品似乎很好。如果你有点感动,你会得到与LSD几乎相同的结果。

import cv2
import numpy as np
img = cv2.imread('/home/user/Downloads/111_131_1448_433_0.11_0.36_table_20230822_images_20_header.png')
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
#Create default Fast Line Detector (FSD)
fld = cv2.ximgproc.createFastLineDetector()
#Detect lines in the image
lines = fld.detect(gray)
#Draw detected lines in the image
drawn_img = fld.drawSegments(gray, lines)
cv2.imshow("FLD", drawn_img)
cv2.waitKey(0)

2、EDlines算法

EDlines算法原理
1 运行一个灰度图像,运行边缘检测、边缘绘制ED算法,产生像素相邻的链,称之为边缘。边缘线段直观地反应对象的边界。
2 利用直线度准则,即最小二乘直线拟合法,从生成的像素链中提取线段。
3 线的验证步骤定于亥姆霍兹原理Helmholtz principle ,用来消除虚假线段的检测。
edlines算法无论是速度和效果都是可以的,可以自行研究该算法,该算法研究完毕应该会得到很多东西。

3、霍夫直线检测

import cv2 as cv
import numpy as np
img = cv.imread('/home/user/Downloads/111_131_1448_433_0.11_0.36_table_20230822_images_20_header.png')


def line_detection(image):
    gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)
    # apertureSize做Canny时梯度窗口的大小
    edges = cv.Canny(gray, 50, 150, apertureSize=3)
    # 返回的是r和theta
    lines = cv.HoughLines(edges, 1, np.pi/180, 200)
    for line in lines:
        print(type(line))
        rho, theta = line[0]
        a = np.cos(theta)
        b = np.sin(theta)
        x0 = a*rho
        y0 = b*rho
        # 乘以1000,是根据源码乘的,通过x1、x2、y1、y2画一条直线
        x1 = int(x0+1000*(-b))
        y1 = int(y0+1000*a)
        x2 = int(x0-1000*(-b))
        y2 = int(y0-1000*a)
        cv.line(image, (x1, y1), (x2, y2), (0, 0, 255), 2)  # 2是所画直线长度的宽
        print(x1,y1,x2,y2)
    cv.imshow('image_lines', image)

line_detection(img)
cv.waitKey(0)
cv.destroyAllWindows()

4、边缘检测 cv2.Canny()

cv2.Canny()函数是OpenCV中用于边缘检测的函数,其主要功能是检测图像中的边缘并标记出来。

函数的调用格式如下:

edges = cv2.Canny(image, threshold1, threshold2[, edges[, apertureSize[, L2gradient]]])

其中,参数含义如下:

  • image:要进行边缘检测的输入图像,可以是灰度图像或彩色图像。
  • threshold1:第一个阈值,用于边缘检测中的滞后阈值,建议取值为100。
  • threshold2:第二个阈值,用于边缘检测中的滞后阈值,建议取值为200。
  • edges:可选参数,用于存储边缘检测的结果。如果指定了该参数,则该参数会被用来存储检测到的边缘图像。如果没有指定该参数,则函数会自动创建一个与输入图像相同大小的数组来存储检测到的边缘图像。
  • apertureSize:可选参数,用于指定Sobel算子的大小,建议取值为3。
  • L2gradient:可选参数,用于指定是否使用 L 2 L_2 L2 梯度计算方式。默认值为False,表示使用 L 1 L_1 L1梯度计算方式。

cv2.Canny()函数的工作原理如下:

  • 对输入图像进行灰度化处理。
  • 对灰度图像进行高斯滤波,以平滑图像并去除噪声。
  • 对滤波后的图像使用Sobel算子计算梯度幅值和方向。
  • 对梯度幅值进行非极大值抑制,以压缩边缘带宽。
  • 对压缩后的边缘带宽使用滞后阈值进行二值化,得到二值化图像。
  • 对二值化图像进行连接操作,将断开的边缘进行连接,得到最终的边缘图像。
    下面是一个简单的示例代码,演示了如何使用cv2.Canny()函数进行边缘检测:
import cv2
import numpy as np

# 读取一张图片
img = cv2.imread('test.jpg', 0)

# 使用Canny函数进行边缘检测
edges = cv2.Canny(img, 100, 200)

# 显示结果
cv2.imshow('Original', img)
cv2.imshow('Canny Edges', edges)
cv2.waitKey(0)
cv2.destroyAllWindows()

需要注意的是,在使用cv2.Canny()函数进行边缘检测时,阈值的选择对最终的结果有很大的影响。一般来说,较低的阈值可以检测到较弱的边缘,而较高的阈值可以去除较弱的边缘。建议在使用该函数时,先使用默认的阈值进行测试,然后根据实际情况进行调整。

参考资料
https://blog.csdn.net/m0_51233386/article/details/124171578
https://www.52dianzi.com/category/article/37/359179.html
https://blog.csdn.net/qq_28949847/article/details/129537581
https://docs.opencv.org/3.4/d9/db0/tutorial_hough_lines.html文章来源地址https://www.toymoban.com/news/detail-676504.html

到了这里,关于图像线段检测几种方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 计算机视觉实验:图像处理综合-路沿检测

    目录 实验步骤与过程 1. 路沿检测方法设计 2. 路沿检测方法实现 2.1 视频图像提取 2.2 图像预处理 2.3 兴趣区域提取 2.4 边缘检测 ​​​​​​​2.5 Hough变换 ​​​​​​​2.6 线条过滤与图像输出 3. 路沿检测结果展示 4. 其他路沿检测方法 实验结论或体会 实验内容: 针对

    2024年02月14日
    浏览(45)
  • 计算机视觉基础(3)——图像滤波与边缘检测

    本文主要聚焦于 图像滤波与边缘检测 两部分。图像滤波部分分析的是 线性移不变系统,将介绍两类滤波器,平滑滤波器和梯度滤波器 。边缘检测部分将介绍 高斯导数滤波器和Canny边缘检测器 。为了更好的阅读体验,读者需要提前了解或掌握卷积、线性移不变系统、梯度、

    2024年02月02日
    浏览(60)
  • 【计算机视觉】【图像处理综合应用】路沿检测

    实验内容: 针对给定的视频,利用图像处理基本方法实现道路路沿的检测; 提示:可利用 Hough 变换进行线检测,融合路沿的结构信息实现路沿边界定位(图中红色的点位置)。 处理视频文件 处理视频文件的主要流程如下: 读取视频 → 逐帧提取 → 路沿检测 → 逐帧保存

    2024年02月05日
    浏览(53)
  • 计算机视觉图像检测之从EasyDL到BML

    目录 EasyDL篇 一、数据处理 1.1数据导入 1.2 数据质检 1.3 数据标注 1.4 数据增强 二、模型训练(注意费用问题) 2.1 创建模型 2.2训练模型 三、模型发布 四、鉴权认证 4.1 登录百度智能云平台 4.2 准备工作 4.3 获取鉴权认证 BML篇         BML的使用与EasyDL基本一致,故不给出详

    2024年01月23日
    浏览(39)
  • 【图像分类】基于计算机视觉的坑洼道路检测和识别(2个类别)

    写在前面: 首先感谢兄弟们的支持,让我有创作的动力,在创作过程我会尽最大能力,保证作品的质量,如果有问题,可以私信我,让我们携手共进,共创辉煌。 路虽远,行则将至;事虽难,做则必成。只要有愚公移山的志气、滴水穿石的毅力,脚踏实地,埋头苦干,积跬

    2024年02月04日
    浏览(53)
  • 【计算机视觉】图像分割与特征提取——基于Log、Canny的边缘检测

    个人简介:  📦个人主页:赵四司机 🏆学习方向:JAVA后端开发  ⏰往期文章:SpringBoot项目整合微信支付 🔔博主推荐网站:牛客网 刷题|面试|找工作神器 📣种一棵树最好的时间是十年前,其次是现在! 💖喜欢的话麻烦点点关注喔,你们的支持是我的最大动力。 前言:

    2024年02月03日
    浏览(42)
  • 基于 OpenCV 的车辆变道检测,计算机视觉+图像处理技术

    本期教程我们将和小伙伴们一起研究如何使用计算机视觉和图像处理技术来检测汽车在行驶中时汽车是否在改变车道!大家一定听说过使用 OpenCV 的 haar 级联文件可以检测到面部、眼睛等,但是如果目标是汽车,公共汽车呢? 01. 数据集 我们将道路上汽车的视频文件用作数据

    2024年01月25日
    浏览(67)
  • 计算机视觉图像处理常用方法汇总

    光线进入眼睛:当光线从一个物体反射或散射出来,进入人的眼睛时,它们通过角膜和晶状体进入眼球内部。 聚焦光线:角膜和晶状体将光线聚焦在视网膜上。晶状体可以通过调整其形状来调节聚焦距离,使物体的图像清晰地映射在视网膜上。 光敏细胞感受光线:视网膜是

    2024年02月07日
    浏览(52)
  • 计算机视觉实战项目(图像分类+目标检测+目标跟踪+姿态识别+车道线识别+车牌识别)

    教程博客_传送门链接:链接 在本教程中,您将学习如何使用迁移学习训练卷积神经网络以进行图像分类。您可以在 cs231n 上阅读有关迁移学习的更多信息。 本文主要目的是教会你如何自己搭建分类模型,耐心看完,相信会有很大收获。废话不多说,直切主题… 首先们要知道深

    2024年02月07日
    浏览(67)
  • 图像线段检测几种方法

    当我将OpenCV提升到4.1.0时,LineSegmentDetector(LSD)消失了。 OpenCV-contrib有一个名为FastLineDetector的东西,如果它被用作LSD的替代品似乎很好。如果你有点感动,你会得到与LSD几乎相同的结果。 EDlines算法原理 1 运行一个灰度图像,运行边缘检测、边缘绘制ED算法,产生像素相邻的

    2024年02月11日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包