Сортировка списка, который содержит элементы numpy.ndarray PYTHON - PullRequest
0 голосов
/ 05 мая 2019

Я работаю над проектом компьютерного зрения, и я хотел бы кое-что у вас спросить.Я использую cv2.findContours() метод тогда approxPolyDP(), и у меня есть 4-4 обнаруженных края для каждой формы.Есть три прямоугольника на картинке рядом друг с другом.Проблема в том, что я хотел бы отсортировать список по первым координатам x, y.Слева направо.

Спасибо!

contours, _ = cv2.findContours(raw_image2, cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)

contour_list = []
for contour in contours:
    approx= cv2.approxPolyDP(contour,0.1*cv2.arcLength(contour,True),True)
    contur_list.append(approx)


   [array([[[383,  22]],

   [[384, 127]],

   [[492, 127]],

   [[491,  20]]], dtype=int32), array([[[ 54,  16]],

   [[ 52, 123]],

   [[160, 124]],

   [[160,  17]]], dtype=int32), array([[[222,  14]],

   [[220, 124]],

   [[328, 125]],

   [[328,  15]]], dtype=int32)]

Это не отсортированный вывод, но я хочу быть таким:

   [array([[[ 54,  16]],

   [[ 52, 123]],

   [[160, 124]],

   [[160,  17]]],dtype=int32), array([[[222,  14]],

   [[220, 124]],

   [[328, 125]],

   [[328,  15]]], dtype=int32), array([[[383,  22]],

   [[384, 127]],

   [[492, 127]],

   [[491,  20]]], dtype=int32)]

1 Ответ

0 голосов
/ 05 мая 2019

Попробуйте встроенную функцию sorted следующим образом:

sorted(contur_list, key=lambda approx: approx[0,0,0])

здесь параметр key указывает функцию, вызываемую для каждого элемента списка перед выполнением сравнения.Функция reversed может быть вызвана, если вы хотите перевернутую версию отсортированного списка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...