実際のところ
まず模擬的な移動マーカーを生成
$ composite -geometry 48x48+270+220 ar12.png target.png target_1.png $ composite -geometry 48x48+360+260 ar12.png target.png target_2.png $ composite -geometry 48x48+320+200 ar12.png target.png target_3.png
Python
idでそれぞれ判定し、領域中XYの何%の位置にいるかを出力するという処理
import sys import cv2 import numpy as np aruco = cv2.aruco dictionary = aruco.getPredefinedDictionary(aruco.DICT_4X4_50) img_src = cv2.imread(sys.argv[1], 1) corners, ids, rejectedImgPoints = aruco.detectMarkers( img_src, dictionary ) ## マーカーIDから座標情報を変数に格納 for cnt, val in enumerate(ids) : buf = int(val) if (buf == 2): center_one = np.mean(corners[cnt][0],axis=0) if (buf == 42): center_two = np.mean(corners[cnt][0],axis=0) if (buf == 12): center_dist = np.mean(corners[cnt][0],axis=0) #左上のマーカーのXY cent_one_x = int(center_one[0]) cent_one_y = int(center_one[1]) #右下のマーカーのXY cent_two_x = int(center_two[0]) cent_two_y = int(center_two[1]) #追跡対象マーカーの重心情報 print( "DIST {}".format(center_dist) ) #領域のサイズ size_x = cent_two_x - cent_one_x size_y = cent_two_y - cent_one_y #追跡対象マーカーが切り抜き範囲で何パーセントあたりにいるか val_x = (center_dist[0] - cent_one_x) / (size_x) val_y = (center_dist[1] - cent_one_y) / (size_y) print(val_x, val_y) #画像の書き込み im_new = img_src[cent_one_y:cent_two_y, cent_one_x:cent_two_x, :] cv2.imwrite("result.png", im_new)
実行結果
$ python3 detectAr.py target_3.png DIST [343.5 223.5] 0.4124236252545825 0.19978858350951373