Files
2025-11-28 18:49:48 +01:00

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()