Отклоняет маркеры Aruco

Для реализации проекта необходимо сначала обнаружить границу поля состоящую из 4х Aruco маркеров, а затем в этом поле найти маркер отвечающий за координаты манипулятор. Само поле в котором обнаруживается координата манипулятора - основное изображение преобразованное с помощью cv2.warpPerspective точки углов прямоугольника - координаты 4х маркеров поля. Далее в этом изображении мы ищем координату маркера манипулятора. Возникла проблема - при попытки в поле обнаружить маркер манипулятора cv2.aruco.detectMarkers отклоняет маркер. Раньше такая проблема была, но позже решилась сама, сейчас снова возникла и было принято решение разобраться в ней. код преобразования изображения:

# region math
    def pt_angels(self):
        for i in self.order_marks:
            center = [int((self.markerCorners[self.id.index(i)][0][0][0] + self.markerCorners[self.id.index(i)][0][2][0]) / 2),
             int((self.markerCorners[self.id.index(i)][0][0][1] + self.markerCorners[self.id.index(i)][0][2][1]) / 2)]
            self.pt.append(center)

    # region max
    def max_width(self):
        width_AD = np.sqrt(((self.pt[0][0] - self.pt[3][0]) ** 2) + ((self.pt[0][1] - self.pt[3][1]) ** 2))
        width_BC = np.sqrt(((self.pt[1][0] - self.pt[2][0]) ** 2) + ((self.pt[1][1] - self.pt[2][1]) ** 2))
        self.MaxWidth = max(int(width_AD), int(width_BC))

    def max_height(self):
        height_AB = np.sqrt(((self.pt[0][0] - self.pt[1][0]) ** 2) + ((self.pt[0][1] - self.pt[1][1]) ** 2))
        height_CD = np.sqrt(((self.pt[2][0] - self.pt[3][0]) ** 2) + ((self.pt[2][1] - self.pt[3][1]) ** 2))
        self.maxHeight = max(int(height_AB), int(height_CD))
    # endregion

    def math_out(self):
        input_pts = np.float32([self.pt[0], self.pt[1], self.pt[2], self.pt[3]])

        output_pts = np.float32([[0, 0],
                                 [0, self.maxHeight - 1],
                                 [self.MaxWidth - 1, self.maxHeight - 1],
                                 [self.MaxWidth - 1, 0]])

        M = cv2.getPerspectiveTransform(input_pts, output_pts)
        self.out = cv2.warpPerspective(self.src, M, (self.MaxWidth, self.maxHeight), flags=cv2.INTER_LINEAR)

    # endregion

способ обнаружения маркеров все время одинаков -

self.markerCorners, self.markerIds, self.rejectedCandidates = cv2.aruco.detectMarkers(self.src,
                                                                                                  self.dictionary,
                                                                                               parameters=self.parameters)

все маркеры 6x6_250


Ответы (0 шт):