Каждый элемент cornersort
имеет тип numpy.ndarray
. Чтобы лучше это понять, рассмотрим следующий пример:
x = [np.array([[300.34305, 209.00804]], dtype=np.float32), np.array([[336.34305, 214.00804]], dtype=np.float32)]
print(x)
print(type(x[0]))
выход:
[array([[300.34305, 209.00804]], dtype=float32), array([[336.34305, 214.00804]], dtype=float32)]
<type 'numpy.ndarray'>
Вы можете использовать .tolist () , чтобы получить желаемый результат.
Добавьте строку ниже после cornersort = sorted(cornersort, key = sortFirst)
:
cornersort = [i.tolist() for i in cornersort]
Полный код:
import cv2
import numpy as np
chess_img = cv2.imread('board.jpeg')
gray = cv2.cvtColor(chess_img,cv2.COLOR_BGR2GRAY)
kernel = np.ones((5,5), np.uint8)
corners = []
ret , corners = cv2.findChessboardCorners(gray,(7,6), None)
if ret == False:
print('Did not find')
cv2.drawChessboardCorners(chess_img,(7,6),corners,ret)
def sortFirst(val):
return val[0][0]
cornersort = sorted(corners, key = sortFirst)
cornersort = [i.tolist() for i in cornersort]
print(cornersort)
выход:
# print(cornersort[0:10])
[[[146.58010864257812, 240.94161987304688]], [[148.90769958496094, 209.57626342773438]], [[151.7432403564453, 179.90769958496094]], [[154.17581176757812, 152.41171264648438]], [[156.53109741210938, 126.43753051757812]], [[158.8179473876953, 102.08036041259766]], [[161.4022979736328, 78.68504333496094]], [[177.4695281982422, 240.55332946777344]], [[179.25265502929688, 208.77369689941406]], [[180.9288330078125, 179.3069305419922]]]