Отклоняет маркеры 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