繁体   English   中英

如何检查两个给定点之间是否存在线段?

[英]How to check if there is a line segment between two given points?

我制作了一个 model 来预测电气符号和连接点: model 推理的图像

以 dataframe 的形式给出每个路口边界框的xywh坐标:dataframe的图像,我将如何制作一个 output 以以下形式将所有电线的位置存储在 a.txt 文件中:(x start , y开始),(x结束,y结束)。

我坚持编写一种方法来检查任何两个给定路口之间是否存在有效线路(电线)。

data = df.loc[df['name'] == 'junction']

# iterates through all of the junctions
for index, row in data.iterrows():
    for index2, row2 in data.iterrows():
        check_if_wire_is_valid()

我的尝试是从推理图像中删除所有电子符号(使边界框中的所有内容都变成白色,除了连接点)并运行 cv.HoughLinesP 来查找电线。 我如何编写一个 function 来检查 cv.HoughLinesP output 是否位于两个路口之间?

请注意,两个连接点之间的最小距离应大于 1px,因为如果我有这样的并联电路:左上角和右下角的连接点将“检测”到它们之间超过 1px 的线并将其误解为有效线。

编辑轮廓上的 minAreaRect 我画了这个电路,没有用于简化和测试的元素。 这是为给定轮廓找到的结果 minAreaRect。 我似乎无法找到一种方法来正确验证此行。

我最初的解决方案是比较任意两个连接点,如果它们在x轴上相对靠近,那么我会说这两个连接点形成一条垂直线,如果其他两个连接点在y轴上靠近,我会得出结论形成水平线。 到轴的连接距离

现在,如果我有一条对角线,这会产生问题。 我正在尝试找到一个一致且适用于每个电路的解决方案。 我相信我正在使用 HoughLinesP 方法或轮廓,但据我所知,这是可以帮助我的。

主要目标是创建用于模拟目的的 LTSpice 可读电路。 我应该更改查找有效行的方法吗? 如果是这样,您对这个问题有何看法?

这应该可以使用findContours()来实现。 电线总是(大致)直线,对吧?

  • 把分类箱漆成白色,就像你说的
  • threshold()得到一个二值图像,其中电线(以及其他符号和字母)为白色,其他一切为黑色。
  • 在其上运行findContours()以提取对象。
  • 获取所有轮廓的边界框 ( minAreaRect )
  • 丢弃所有边长比太宽的轮廓,那些是字母或符号,只保留那些细到足以成为电线的轮廓

现在你得到了所有的电线作为对象,类似于连接列表。 现在,关于如何合并这两个......想到的一些选项:

  • 将盒子增加一定数量,并检查它们是否重叠。
  • 从接线盒插入一条线,并检查它们是否穿过附近的任何相交盒。
  • 或者反过来:在交叉点之间画一条线,并检查有多少线穿过某个接线盒。

这是一个纯数学问题,我不知道你的性能要求是什么。 所以我会把它留在那里。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM