46 lines
1.5 KiB
Python
46 lines
1.5 KiB
Python
import cv2 # Import the OpenCV library
|
|
import numpy as np
|
|
|
|
|
|
# TODO make this configurable from the command line using parser
|
|
markerID = 10 # Try 1 - 4
|
|
|
|
# Define some relevant constants
|
|
dpi = 72 # dots (pixels) per inch [inch^(-1)]
|
|
inch2mm = 25.4 # [mm / inch]
|
|
dpmm = dpi / inch2mm # Dots per mm [mm^(-1)]
|
|
|
|
# Define size of output image to fit A4 paper
|
|
a4width = 210.0 # [mm]
|
|
a4height = 297.0 # [mm]
|
|
|
|
# Size of output image
|
|
width = np.uint(np.round(a4width * dpmm)) # [pixels]
|
|
height = np.uint(np.round(a4height * dpmm)) # [pixels]
|
|
|
|
# Size of ArUco marker
|
|
markerPhysicalSize = 150 # [mm]
|
|
markerSize = np.uint(np.round(markerPhysicalSize * dpmm)) # [pixels]
|
|
|
|
# Create landmark image (all white gray scale image)
|
|
#landmarkImage = np.ones((width, height), dtype=np.uint8) * np.uint8(255)
|
|
landmarkImage = np.ones((height, width), dtype=np.uint8) * np.uint8(255)
|
|
|
|
# Initialize the ArUco dictionary
|
|
arucoDict = cv2.aruco.getPredefinedDictionary(cv2.aruco.DICT_6X6_250)
|
|
|
|
# Draw marker
|
|
startWidth = int(np.round((width-markerSize)/2))
|
|
startHeight = int(np.round((height-markerSize)/2))
|
|
landmarkImage[startHeight:int(startHeight+markerSize), startWidth:int(startWidth+markerSize)] = cv2.aruco.drawMarker(arucoDict, markerID, markerSize, 1)
|
|
cv2.putText(landmarkImage, str(markerID), (startWidth, startHeight - 60), cv2.FONT_HERSHEY_SIMPLEX, 2.0, (0,0,0), 2)
|
|
|
|
|
|
# Save image
|
|
cv2.imwrite("../../../data/landmark" + str(markerID) + ".png", landmarkImage)
|
|
|
|
# Show image
|
|
cv2.namedWindow("Landmark")
|
|
cv2.imshow("Landmark", landmarkImage)
|
|
cv2.waitKey()
|