我希望在图像上的两个已知点之间运行直线检测器,但首先我需要加宽直线周围的区域,以便我的直线检测器有更多的区域可用.主要问题是它相对于线的斜率拉伸了线周围的区域.例如:white line generated form two points with black bounding box.

我try 手动操作长方体数组:

input_to_min_area = np.array([[660, 888], [653, 540]]) # this works instead of contour as an input to minAreaRect

rect = cv.minAreaRect(input_to_min_area)
box = cv.boxPoints(rect)
box[[0, 3], 0] += 20
box[[1, 2], 0] -= 20
box = np.int0(box)

cv.drawContours(self.images[0], [box], 0, (0, 255, 255), 2)

但这对任何直线斜率都不起作用.从垂直到this angle一切都很好,但horizontal lines就不行了.

哪种更简单的解决方案适用于任何直线坡度?

推荐答案

minAreaRect()表示中心点、矩形的大小和Angular .

您只需添加到矩形的shorter边长即可.然后你就有了一个"更宽的矩形"的描述.然后你可以用它做任何你想做的事情,比如在它上面打boxPoints().

padding = 42

rect = cv.minAreaRect(input_to_min_area)

(center, (w,h), angle) = rect # take it apart

if w < h: # we don't know which side is longer, add to shorter side
    w += padding
else:
    h += padding

rect = (center, (w,h), angle) # rebuild

两个端点周围有一个加宽的方框:

enter image description here

Python相关问答推荐

通过优化空间在Python中的饼图中添加标签

更改matplotlib彩色条的字体并勾选标签?

Polars LazyFrame在收集后未返回指定的模式顺序

如何删除索引过go 的lexsort深度可能会影响性能?' &>

如何在Windows上用Python提取名称中带有逗号的文件?

在Pandas DataFrame操作中用链接替换'方法的更有效方法

将输入管道传输到正在运行的Python脚本中

如何在Python中并行化以下搜索?

ODE集成中如何终止solve_ivp的无限运行

如何将一个动态分配的C数组转换为Numpy数组,并在C扩展模块中返回给Python

如何使用表达式将字符串解压缩到Polars DataFrame中的多个列中?

如何防止Pandas将索引标为周期?

Polars Group by描述扩展

Python 3试图访问在线程调用中实例化的类的对象

为什么t sns.barplot图例不显示所有值?'

numpy数组和数组标量之间的不同行为

浏览超过10k页获取数据,解析:欧洲搜索服务:从欧盟站点收集机会的微小刮刀&

Pythonquests.get(Url)返回Colab中的空内容

遍历列表列表,然后创建数据帧

如何定义一个将类型与接收该类型的参数的可调用进行映射的字典?