【发布时间】:2019-06-23 13:13:17
【问题描述】:
我已经使用 openCV 处理了图像以获得图像模式。图像模式分别由 2 个水平和垂直线的 Python 列表表示。线条代表图案的边界。
fx = horizontal lines
fy = vertical lines
每个列表都根据距图像左上角的距离顺序排列。接下来,我使用以下方法计算发现的线的交点:
def get_corners(fx,fy):
corners = []
for x_line in fx:
for y_line in fy:
corner = get_intersection(x_line,y_line)
if corner is not None:
corners.append(corner)
这应该给我corners(格式:(x,y)),从左到右,从上到下。现在我想使用这些坐标从图像中裁剪出矩形。
corners 列表的大小各不相同,模式堆叠,这意味着它们有共同点。给定点列表,fx 和 fy 的行列表的大小和大小:
如何使用点来裁剪矩形?
如果需要,请随时更改get_corners()。
这是一个示例:模式检测会在 2x2 中生成 4 个可能的矩形。这意味着列表points 共有9 个值。
Points: [[],[],[],
[],[],[],
[],[],[]]
我可以使用以下方法裁剪第一个矩形:
x1,y1 = points[0] #top left corner of the first pattern
x2,y2 = points[5] #bottom right corner of the first pattern
#rectangle
rectange = img[y1:y2,x1:x2]
【问题讨论】:
-
你有一个真实的输出例子和预期的例子吗?为了看看它有什么问题,因为我不完全确定已经理解你的问题。谢谢!
-
我没有例子,因为我自己无法完成算法。我更新了我的问题以显示我到目前为止所拥有的内容,但我对分数使用了硬值。我需要能够根据我获得的分数来选择这些值,这取决于我获得的行数。
-
你为什么还要关心角点?线条更容易处理(只需以与提取角相同的方式提取矩形)。两条正交线怎么可能不相交?它们是线段吗?
-
线条一直贯穿图像。它们表示为
(rho, theta),这意味着一条水平线可以代表多个矩形。我知道它们从哪里开始或结束的唯一方法是使用交叉点。你能解释一下你将如何使用这些线条吗? -
至少添加一个输入图像样本,突出显示您需要的矩形
标签: python-3.x algorithm opencv