删除分段线(OpenCV、Python)

2024-01-09

给出以下代码:

import numpy as np
import cv2

gray = cv2.imread('image.png')
edges = cv2.Canny(gray,50,150,apertureSize = 3)
cv2.imwrite('edges-50-150.jpg',edges)
minLineLength=100
lines = cv2.HoughLinesP(image=edges,rho=1,theta=np.pi/180, threshold=100,lines=np.array([]), minLineLength=minLineLength,maxLineGap=80)

a,b,c = lines.shape
for i in range(a):
    cv2.line(gray, (lines[i][0][0], lines[i][0][1]), (lines[i][0][2], lines[i][0][3]), (0, 0, 255), 1, cv2.LINE_AA)
    cv2.imwrite('houghlines.jpg', gray)
    cv2.imshow('img', gray)
    cv2.waitKey(0)

我可以实现此(源)图像中的水平线:

这是结果:

如何删除红色的线?我想要实现的是删除这些行,以便图像更干净并可供其他进程使用。 代码取自here https://stackoverflow.com/questions/39752235/python-how-to-detect-vertical-and-horizontal-lines-in-an-image-with-houghlines-w.


检查此链接http://docs.opencv.org/3.2.0/d1/dee/tutorial_moprh_lines_detection.html http://docs.opencv.org/3.2.0/d1/dee/tutorial_moprh_lines_detection.html并检测水平线。然后,将包含水平线的像素值设置为零。给定的代码是 C++ 语言,但您可以轻松地将其转换为 Python。

您还可以使用线斜率从检测到的线中拒绝水平线。排除所有斜率几乎等于零的线。

以下是您可以使用的代码片段(我根据斜率和形态闭合对您的代码做了一些更改):

import numpy as np
import cv2

gray = cv2.imread('image.png')
edges = cv2.Canny(gray,50,150,apertureSize = 3)
cv2.imwrite('edges-50-150.jpg',edges)
minLineLength=100
lines = cv2.HoughLinesP(image=edges,rho=1,theta=np.pi/180, threshold=100,lines=np.array([]), minLineLength=minLineLength,maxLineGap=80)

a,b,c = lines.shape
for i in range(a):
    x = lines[i][0][0] - lines [i][0][2]
    y = lines[i][0][1] - lines [i][0][3]
    if x!= 0:
        if abs(y/x) <1:
            cv2.line(gray, (lines[i][0][0], lines[i][0][1]), (lines[i][0][2], lines[i][0][3]), (255, 255, 255), 1, cv2.LINE_AA)

se = cv2.getStructuringElement(cv2.MORPH_ELLIPSE , (3,3))
gray = cv2.morphologyEx(gray, cv2.MORPH_CLOSE, se)
cv2.imwrite('houghlines.jpg', gray)
cv2.imshow('img', gray)
cv2.waitKey(0)

Input:

Output:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

删除分段线(OpenCV、Python) 的相关文章

随机推荐

  • 如何在 React 中的不同文件之间共享变量数据

    我正在尝试在我的股票市场项目中设置图表 我正在尝试显示在 Gatsby 中点击的股票的图表 目前 我可以通过在代码中手动输入股票名称来显示任何股票的股票图表 我想用 api 调用的 url 内的 query 替换股票名称 因为const q
  • 如何使用 protoc 将协议缓冲区字符串编码为二进制

    我一直在尝试使用 protoc cli 实用程序对字符串进行编码 注意到输出仍然包含纯文本 我究竟做错了什么 osboxes osboxes proto bin cat teststring proto syntax proto2 mess
  • 暂停申请

    如何暂停我的应用程序或向我的应用程序发送暂停消息 我想模拟按下主页按钮 UIApplication 有一个私有实例方法 以下代码可以工作 在 iPhone 3GS 中测试 UIApplication app UIApplication sh
  • 如何让selenium等待ajax响应?

    我怎样才能让硒等待日历小部件之类的东西加载 现在我只是在做一个Thread sleep 2500 将测试用例导出到 junit 程序后 我会用 waitForElementPresent locator 这将等到该元素出现在 DOM 中 如
  • iOS 8 横向模式下按钮不显示

    我有一个按钮 我将其约束设置为 水平中心 和 垂直中心 在纵向模式下 它按预期出现在中心 但是当我将设备旋转到横向模式时 按钮消失 状态栏也不可见 Here is a screen which show constraint needed
  • 将数量输入字段更改为 WooCommerce 中的下拉菜单

    我在 function php 中使用以下内容 它在单个产品页面上效果很好 我遇到的问题是在购物车页面上 当您选择不同的数量时 它不会自动更新购物车 有任何想法吗 function woocommerce quantity input ar
  • PHP - 序列化具有静态属性的类

    当用户登录我的网站时 我会创建一个实例User类 获取一些与用户相关的数据并将对象存储在SESSION 我从数据库获取的一些数据应该在整个会话期间保持不变 并且我希望可以从其他对象访问这些数据 我更喜欢使用User static value
  • 如何在AppDomain中执行非托管程序集?

    执行非托管程序集时出现以下错误 无法加载文件或程序集 文件 C 程序 文件 Maxima 5 21 1 lib maxima 5 21 1 binary gcl maxima exe 或其依赖项之一 这 模块预计包含一个 装配清单 我应该怎
  • Tailwind CSS + VueJS 单文件组件与 VS Code 集成

    如何正确配置 Tailwind CSS 和 VS Code 以至少禁用 VueJS 单文件组件 vue cli 内有关 at rule 和空标记错误的错误
  • 用 C++ 编写操作系统[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Python/Pandas:如何从 datetime64[ns] 转换为 datetime

    我有一个处理 Excel 文件的脚本 发送它的部门有一个生成它的系统 我的脚本停止工作 我突然收到错误Can only use str accessor with string values which use np object dtyp
  • atexit() 函数

    有几个教程解释了如何使用atexit 函数如 http linux die net man 3 atexit http linux die net man 3 atexit 示例在 main 函数中给出 很容易理解 但是 我正在我的程序中创
  • 在 Windows 中使用 .Net 手动加载和卸载驱动程序

    我有一个通过 COM USB 转换器使用 USB 端口连接到计算机的设备 并且我使用 FTDI 驱动程序来模拟该 USB 上的虚拟 COM 端口 我的转换器有时会冻结 Windows 驱动程序也是如此 我无法打开 关闭 COM 软件无法通过
  • 获取单选按钮值 [INNO SETUP]

    我正在尝试在 Inno Setup 中创建一个新窗口 在此窗口中 应该有 5 个单选按钮 用户必须仅选择此选项之一 当用户单击下一个按钮时 我必须获取并保存单选按钮的值 在某处 并将该值传递给带有参数的批处理文件 将运行 我认为我应该在 N
  • ASP.NET 中的 Excel 读取:如果列具有不同的数据格式,则不会读取数据

    我有一个 asp net C 应用程序 我正在其中使用 OLEDBConnection 读取电子表格的内容 我正在使用下面的代码行从 Excel 电子表格中读取数据 OleDbConnection con new OleDbConnecti
  • 在负载平衡情况下使用 WCF 4.5 RemoteEndpointMessageProperty 获取客户端 IP 地址

    我在 IIS 中托管了 WCF 4 5 Restful 服务 我正在尝试使用 RemoteEndpointMessageProperty 获取客户端的 IP 地址 消耗该服务 Code 1 private string GetClientI
  • 为什么人们不使用四面体作为天空盒?

    在3D游戏中渲染固定纹理的天空时 人们通常会先在立方体贴图中创建6个纹理 然后在相机周围渲染一个立方体 在 GLSL 中 您可以使用法线而不是纹理坐标来访问纹理中的像素 并且可以通过标准化相对于相机的片段位置轻松获得该法线 然而 这个过程可
  • 将多字节字符映射到其 unicode 点表示

    如何在 C 中将单个 UTF 8 字符映射到其 unicode 点 例如 将被映射到00c8 如果您的平台wchar t存储unicode 如果它是32位类型 它可能会 并且你有一个UTF 8语言环境 你可以调用mbrtowc 来自 C90
  • 根据每个文件之间的空行将文本文件的段落拆分为多个文件

    以前我问过同样的问题 但没有成功 可能是我在上一个问题中不清楚 这是我希望根据每个摘要之间的空行将其拆分为 3 个文件的文件 并以摘要编号作为文件名 16914261 Energetic basis of molecular recogni
  • 删除分段线(OpenCV、Python)

    给出以下代码 import numpy as np import cv2 gray cv2 imread image png edges cv2 Canny gray 50 150 apertureSize 3 cv2 imwrite ed