实验目的:
写一个Python程序,能够生成指定字典的aruco标签图片,并保存在本地
程序实现:
要编写一个能够生成指定字典的 ArUco 标签图片并保存在本地的 Python 程序,你可以使用 opencv-python
库来生成和处理图像,以及 numpy
库来处理数组。确保你已经安装了这两个库。下面是一个示例程序:
import cv2 import numpy as np def generate_aruco_marker(marker_id, dictionary_name, size=200): aruco_dict = cv2.aruco.Dictionary_get(dictionary_name) marker_image = np.zeros((size, size), dtype=np.uint8) marker_image = cv2.aruco.drawMarker(aruco_dict, marker_id, size, marker_image) return marker_image def save_marker_image(marker_id, dictionary_name, filename): marker_image = generate_aruco_marker(marker_id, dictionary_name) cv2.imwrite(filename, marker_image) print(f"Marker image saved as {filename}") if __name__ == "__main__": marker_id = 0 # 修改为你希望生成的 ArUco 标签 ID dictionary_name = cv2.aruco.DICT_4X4_50 # 修改为你希望使用的字典类型 filename = f"aruco_marker_{marker_id}.png" save_marker_image(marker_id, dictionary_name, filename)
在这个示例程序中,我们定义了两个函数:generate_aruco_marker
用于生成 ArUco 标签图片,save_marker_image
用于保存生成的标签图片。你可以通过修改 marker_id
和 dictionary_name
变量来指定要生成的标签的 ID 和所使用的字典类型。运行程序后,生成的标签图片将会保存在与程序同级的目录下。
请注意,确保你已经安装了 opencv-python
库,如果没有安装,可以使用以下命令进行安装:
pip install opencv-python
此外,确保你也安装了 numpy
库:
pip install numpy
字典选择
ArUco 字典有多种类型,每种类型都包含不同数量和大小的标签。在示例程序中,dictionary_name
使用了 cv2.aruco.DICT_4X4_50
,这是一种 4x4 大小的字典,包含了 50 个不同的标签。
除了 cv2.aruco.DICT_4X4_50
,还有其他几种常用的字典类型,你可以根据需要选择:
cv2.aruco.DICT_4X4_100
: 包含 100 个 4x4 大小的标签。cv2.aruco.DICT_4X4_250
: 包含 250 个 4x4 大小的标签。cv2.aruco.DICT_4X4_1000
: 包含 1000 个 4x4 大小的标签。cv2.aruco.DICT_5X5_50
: 包含 50 个 5x5 大小的标签。cv2.aruco.DICT_5X5_100
: 包含 100 个 5x5 大小的标签。cv2.aruco.DICT_5X5_250
: 包含 250 个 5x5 大小的标签。cv2.aruco.DICT_5X5_1000
: 包含 1000 个 5x5 大小的标签。
还有其他的大小和数量组合,你可以根据你的需要选择适合的字典类型。例如,如果你需要更大或更多样的标签,可以选择更大的字典类型。在程序中,只需将 dictionary_name
替换为你选择的字典类型即可。
此外,"original" 字典是 ArUco 标签的默认字典,它包含了最常用的标签类型。这个字典的命名为 cv2.aruco.DICT_ARUCO_ORIGINAL
,它包含了 1024 个不同的标签,每个标签都有不同的 ID 和图案。如果希望使用这个默认字典,可以在示例程序中的 dictionary_name
变量中使用 cv2.aruco.DICT_ARUCO_ORIGINAL
:
dictionary_name = cv2.aruco.DICT_ARUCO_ORIGINAL
这样,生成的标签将会使用 "original" 字典中的标签类型。注意,"original" 字典相对来说是比较大的,包含了很多不同的标签,所以生成的标签图片可能会相对复杂一些。