/
tracie
/
coursework
Обзор
Документация
Войти
/
tracie
/
coursework
Код
Запросы
0
Задачи
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
test.py
51 строка
2 KB
Tracie Lorette
done
18 июл 2024, 16:00
18 июл 2024, 16:00
c74dd6b
Код
Авторство
О чём код?
import cv2 import cv2.aruco as aruco import numpy as np def draw_axis(img, corners, imgpts): origin = tuple(imgpts[0].ravel().astype(int)) x_axis_end = tuple(imgpts[1].ravel().astype(int)) y_axis_end = tuple(imgpts[2].ravel().astype(int)) z_axis_end = tuple(imgpts[3].ravel().astype(int)) cv2.line(img, origin, x_axis_end, (0, 0, 255), 2) cv2.line(img, origin, y_axis_end, (0, 255, 0), 2) cv2.line(img, origin, z_axis_end, (255, 0, 0), 2) return img # Загрузка изображения image_path = 'telegram-cloud-photo-size-2-5226815886466340422-y.jpg' img = cv2.imread(image_path) # Определение словаря маркеров (6x6_250) aruco_dict = cv2.aruco.getPredefinedDictionary(cv2.aruco.DICT_6X6_250) parameters = cv2.aruco.DetectorParameters() # Поиск маркеров на изображении corners, ids, rejectedImgPoints = aruco.detectMarkers(img, aruco_dict, parameters=parameters) if ids is not None: # Камера калибровочные параметры (вам нужно предварительно откалибровать камеру) # Пример калибровочных параметров camera_matrix = np.array([[1406.08415449821, 0, 0], [2.20679787308599, 1417.99930662800, 0], [1014.13643417416, 566.347754321696, 1]]).reshape(3, 3) dist_coeffs = np.array([-0.213920279981296, 0.123965139798925, 0.001177865591957, 0.002180281180469, 0]).reshape(5, 1) # Определение позы каждого маркера rvecs, tvecs, _ = cv2.aruco.estimatePoseSingleMarkers(corners, 0.05, camera_matrix, dist_coeffs) for rvec, tvec, corner in zip(rvecs, tvecs, corners): # Рисование осей aruco.drawDetectedMarkers(img, corners) # Расчёт точек для осей axis = np.float32([[0, 0, 0], [0.05, 0, 0], [0, 0.05, 0], [0, 0, 0.05]]).reshape(-1, 3) imgpts, jac = cv2.projectPoints(axis, rvec, tvec, camera_matrix, dist_coeffs) img = draw_axis(img, corner, imgpts) # Отображение изображения cv2.imshow('Image with ArUco marker', img) cv2.waitKey(0) cv2.destroyAllWindows()