52 lines
1.7 KiB
Python
52 lines
1.7 KiB
Python
import numpy as np
|
|
import argparse
|
|
import cv2
|
|
import sys
|
|
from aruco_types import ARUCO_DICT
|
|
|
|
def generate(aruco_dict: cv2.aruco.Dictionary, tag_id: int, side_pixels: int = 300):
|
|
tag = np.zeros((side_pixels, side_pixels, 1), dtype="uint8")
|
|
cv2.aruco.generateImageMarker(aruco_dict, tag_id, side_pixels, tag, 1)
|
|
|
|
return tag
|
|
|
|
def main():
|
|
# construct the argument parser and parse the arguments
|
|
ap = argparse.ArgumentParser()
|
|
ap.add_argument("-f", "--folder", required=True,
|
|
help="path to output image containing ArUCo tag")
|
|
ap.add_argument("-d", "--id", type=int, required=True,
|
|
help="ID of ArUCo tag to generate")
|
|
ap.add_argument("-t", "--type", type=str,
|
|
default="DICT_ARUCO_ORIGINAL",
|
|
help="type of ArUCo tag to generate")
|
|
ap.add_argument("-i", "--imagetype", type=str,
|
|
default="png",
|
|
help="image file type of ArUCo tag image")
|
|
args = vars(ap.parse_args())
|
|
|
|
# verify that the supplied ArUCo tag exists and is supported by
|
|
# OpenCV
|
|
if ARUCO_DICT.get(args["type"], None) is None:
|
|
print("[INFO] ArUCo tag of '{}' is not supported".format(
|
|
args["type"]))
|
|
sys.exit(0)
|
|
|
|
# load the ArUCo dictionary
|
|
aruco_dict = cv2.aruco.getPredefinedDictionary(ARUCO_DICT[args["type"]])
|
|
|
|
# allocate memory for the output ArUCo tag and then draw the ArUCo
|
|
# tag on the output image
|
|
print("[INFO] generating ArUCo tag type '{}' with ID '{}'".format(
|
|
args["type"], args["id"]))
|
|
tag = generate(aruco_dict, args["id"], 300)
|
|
# write the generated ArUCo tag to disk and then display it to our
|
|
# screen
|
|
filename = f"{args["folder"]}/{args["type"]}_ID_{args["id"]:04d}.{args["imagetype"]}"
|
|
cv2.imwrite(filename, tag)
|
|
cv2.imshow("ArUCo Tag", tag)
|
|
cv2.waitKey(0)
|
|
|
|
if __name__ == '__main__':
|
|
main()
|