当前位置:   article > 正文

【OpenCV】ArUco Marker_aurco marker

aurco marker

1. 创建

import cv2 as cv
import numpy as np

# 创建
dictionary = cv.aruco.getPredefinedDictionary(dict=cv.aruco.DICT_6X6_250)
img = cv.aruco.drawMarker(dictionary, id=23, sidePixels=200, borderBits=1)
# id         指定该Marker在字典中的索引ID,该例中合法的ID为[0, 249]
# sidePixels 指定输出的Marker图像的尺寸,单位是像素,该例中为(200,200)
#            如果使用DICT_6X6_250,则编码区域被划分为6X6个等大小的模块
#            参数borderBits=1,所以整个标志块区域被划分为8X8个等大小的模块
#            模块的尺寸必须大于一个像素。因此该例中,此参数最小值为8
# borderBits 指定编码区域到标志块区域的距离。单位是编码模块。取值必须大于等于1
print(img.shape)
cv.imshow("Aruco Marker", img)
cv.waitKey()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

在这里插入图片描述

2. 检测

2.1 创建检测图像

# 创建图像
img_detected = np.ones((800, 600), dtype=np.uint8) * 255
img_detected[50:100, 50:100] = cv.aruco.drawMarker(dictionary, id=23, sidePixels=50, borderBits=1)
img_detected[350:400, 350:400] = cv.aruco.drawMarker(dictionary, id=18, sidePixels=50, borderBits=1)
img_detected[450:500, 450:500] = cv.aruco.drawMarker(dictionary, id=33, sidePixels=50, borderBits=1)
cv.imshow("img_detected", img_detected)
cv.waitKey()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

在这里插入图片描述

2.2 检测

corners, ids, rejectedImgPoints = cv.aruco.detectMarkers(image=img_detected,
                                                         dictionary=dictionary,
                                                         parameters=None)
img_color = cv.cvtColor(img_detected, cv.COLOR_GRAY2BGR)
cv.aruco.drawDetectedMarkers(img_color, corners, ids)
cv.imshow("DectectedMarker", img_color)
cv.waitKey()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

在这里插入图片描述

3. 标志块位姿估计

camera_matrix = np.array([[532.79536562, 0, 342.4582516],
                          [0, 532.91928338, 233.90060514],
                          [0, 0, 1.]])
dist_coefs = np.array([-2.81086258e-01, 2.72581018e-02, 1.21665908e-03, -1.34204275e-04, 1.58514022e-01])

rvecs, tvecs, _objPoints = cv.aruco.estimatePoseSingleMarkers(corners, 0.05, camera_matrix, dist_coefs)
for i in range(len(rvecs)):
    cv.aruco.drawAxis(img_color, camera_matrix, dist_coefs, rvecs[i], tvecs[i], 0.05)

cv.imshow("Pose Estimation", img_color)
cv.waitKey()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/609611
推荐阅读
相关标签
  

闽ICP备14008679号