```python
def order_points(pts):
# 一共4个坐标点
rect = np.zeros((4, 2), dtype = "float32")
# 按顺序找到对应坐标0123分别是 左上,右上,右下,左下
# 计算左上,右下
s = pts.sum(axis = 1)
rect[0] = pts[np.argmin(s)]
rect[2] = pts[np.argmax(s)]
# 计算右上和左下
diff = np.diff(pts, axis = 1)
rect[1] = pts[np.argmin(diff)]
rect[3] = pts[np.argmax(diff)]
return rect
不太理解为什么四个坐标点计算出来的原理,为什么,虽然是视频哩说的对应位置是这样
,确实不能理解求最小和对应的坐标索引是左上角,其他的也类似
【以下回答由 GPT 生成】
这段代码使用了一种常见的方法,称为"轮廓顶点排序",用于将给定的四个点按照特定的顺序进行排序,以便进行透视变换。下面我将详细解释这个计算方法的原理。
def order_points(pts):
rect = np.zeros((4, 2), dtype="float32")
# 计算左上和右下
s = pts.sum(axis=1)
rect[0] = pts[np.argmin(s)]
rect[2] = pts[np.argmax(s)]
# 计算右上和左下
diff = np.diff(pts, axis=1)
rect[1] = pts[np.argmin(diff)]
rect[3] = pts[np.argmax(diff)]
return rect
首先,我们创建一个2x4的全零矩阵rect
,用于存储排好序的四个点的坐标。
然后,我们进行第一次排序,找到左上角和右下角的坐标。通过将四个点的x坐标和y坐标分别相加,我们可以得到一个包含四个值的数组s
。然后,通过np.argmin(s)
和np.argmax(s)
找到最小值和最大值对应的索引,分别表示左上角和右下角的点。将这两个点的坐标存储在rect
的第一行和第三行。
接下来,我们进行第二次排序,找到右上角和左下角的坐标。通过计算四个点的x坐标的差异,可以得到一个包含三个值的数组diff
。然后,通过np.argmin(diff)
和np.argmax(diff)
找到最小值和最大值对应的索引,分别表示右上角和左下角的点。将这两个点的坐标存储在rect
的第二行和第四行。
最后,将排好序的四个点的坐标rect
返回。
这个方法的原理是基于以下观察:
通过这种方式,可以保证得到排好序的四个点,以便进行透视变换。
希望这个解释对你有帮助。如果还有其他问题,请随时提问。
【相关推荐】