Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Ordering coordinates clockwise with Python and OpenCV
from imutils import perspective
import numpy as np
def order_points_new(pts):
# sort the points based on their x-coordinates
xSorted = pts[np.argsort(pts[:, 0]), :]
# grab the left-most and right-most points from the sorted
# x-roodinate points
leftMost = xSorted[:2, :]
rightMost = xSorted[2:, :]
# now, sort the left-most coordinates according to their
# y-coordinates so we can grab the top-left and bottom-left
# points, respectively
leftMost = leftMost[np.argsort(leftMost[:, 1]), :]
(tl, bl) = leftMost
# if use Euclidean distance, it will run in error when the object
# is trapezoid. So we should use the same simple y-coordinates order method.
# now, sort the right-most coordinates according to their
# y-coordinates so we can grab the top-right and bottom-right
# points, respectively
rightMost = rightMost[np.argsort(rightMost[:, 1]), :]
(tr, br) = rightMost
# return the coordinates in top-left, top-right,
# bottom-right, and bottom-left order
return np.array([tl, tr, br, bl], dtype="float32")
pts = np.array([[10,10],
[10,20],
[20,20],
[30,10]])
ordered_old = perspective.order_points(pts)
ordered_new = order_points_new(pts)
print("raw points")
print(pts.astype("int"))
print("ordered by Euclidean distance")
print(ordered_old.astype("int"))
print("orderd by y-coordinates")
print(ordered_new.astype("int"))
print("")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.