我希望在图像上的两个已知点之间运行线检测器,但首先我需要加宽线周围的区域,这样我的线检测器就有更多的区域可供使用。主要问题是它会相对于线斜率拉伸线周围的区域。例如:white line generated form two points with black bounding box。
我试着手动操作box数组:
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不起作用。
哪一种更简单的解决方案适用于任何直线斜率?
2条答案
按热度按时间gijlo24d1#
minAreaRect()
提供中心点、矩形的大小和Angular 。你可以只增加矩形的短边长度,这样你就有了一个“更宽的矩形”的描述,然后你可以对它做任何你想做的事情,比如在它上面调用
boxPoints()
。一个方框围绕着你的两个端点,加宽了:
vbkedwbf2#
我们可以在垂直于“minAreaRect”的Angular 的轴上添加填充。
假设盒子中的点的顺序是根据
rect
的Angular 排序的(我不知道它是否总是正确的--可能需要对点进行排序)。代码示例:
示例输出:
我们可能还想在平行方向上展开长方体。
我还是不确定那些迹象...
在这种情况下,更新
input_to_min_area
会更简单:输出量: