Last active
July 23, 2023 17:19
-
-
Save flashlib/e8261539915426866ae910d55a3f9959 to your computer and use it in GitHub Desktop.
Ordering coordinates clockwise with Python and OpenCV
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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("") |
As of today, it is clockwise !
Cheers for this function!
thanks so much
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Why you call it clockwise order while it's counter clockwise as it can be seen in your example?