OpenCVのarucoの四角


opencvのarucoで角の対応関係をよく忘れるので備忘録


import cv2
dic = cv2.aruco.getPredefinedDictionary(aruco.DICT_4X4_50)

img = cv2.imread('sample.png')
corners, ids, _ = aruco.detectMarkers(frame, dic)

idsには検出したマーカーのidが入っている。
このリストの順に、cornersに四角の位置が格納されている。

例えば、0番のマーカーの四角を知りたければ

corners[list(ids.flatten()).index(0)][0] #マーカー0番の四角

で取得できる

四角は左上から時計回りに格納されている。

つまり、

# マーカー0番の左上
corners[list(ids.flatten()).index(0)][0][0]
# マーカー0番の右上
corners[list(ids.flatten()).index(0)][0][1]
# マーカー0番の右下
corners[list(ids.flatten()).index(0)][0][2]
# マーカー0番の左下
corners[list(ids.flatten()).index(0)][0][3]

そして、これで取得できる位置は[x, y]の順で格納されている。