opencv2/aruco
时间: 2025-01-09 16:56:31 浏览: 0
### OpenCV 2 中 Aruco 模块简介
Aruco模块属于OpenCV contrib扩展库的一部分,在此版本中提供了强大的功能来处理基于标记的增强现实应用以及机器人导航中的定位和映射任务[^1]。
### 安装依赖项
为了能够使用Aruco模块,需要先安装带有contrib包支持的OpenCV版本。可以通过pip命令完成这一操作:
```bash
pip install opencv-contrib-python==2.4.13
```
请注意上述指令适用于OpenCV 2.x系列;对于更高版本可能不适用。
### 创建字典并生成标签图像
Aruco模块允许创建不同类型的预定义字典或自定义字典。下面是一个简单的例子展示如何加载默认字典,并打印出特定ID对应的标签图片:
```python
import cv2
import numpy as np
dictionary = cv2.aruco.Dictionary_get(cv2.aruco.DICT_6X6_250)
# 打印 ID=9 的标签到文件 "marker.png"
tag_size = 200
img = dictionary.drawMarker(9, tag_size)
cv2.imwrite('marker.png', img)
print("Tag image saved to marker.png")
# 显示生成的结果图窗体
cv2.imshow('Generated Tag Image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
这段代码会保存一张大小为`tag_size x tag_size`像素、编号为9的标准Aruco标签至当前目录下名为"marker.png"的文件里。
### 检测视频流中的Aruco标签
一旦有了实际场景下的摄像头输入数据或者预先录制好的视频片段之后就可以尝试识别其中存在的Aruco标签了。这里给出一段基础示例说明怎样读取相机帧并对每一帧执行检测过程:
```python
cap = cv2.VideoCapture(0) # 或者指定路径打开本地视频文件 cap=cv2.VideoCapture('video.mp4')
while True:
ret, frame = cap.read()
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
parameters = cv2.aruco.DetectorParameters_create()
corners, ids, rejectedImgPoints = cv2.aruco.detectMarkers(gray, dictionary, parameters=parameters)
if np.all(ids != None):
for i in range(len(ids)):
# 绘制边框与中心点
cv2.polylines(frame,[np.int32(corners[i])],True,(0,255,0), thickness=2)
c = (int(np.mean([corners[i][0][j][0] for j in range(4)])), int(np.mean([corners[i][0][j][1] for j in range(4)])))
cv2.putText(frame,str(int(ids[i])),c,cv2.FONT_HERSHEY_SIMPLEX,.8,(255,0,0),thickness=2,lineType=cv2.LINE_AA)
cv2.imshow('Detected Markers',frame)
key = cv2.waitKey(1)&0xFF
if key == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
```
以上程序实现了从设备获取实时画面的功能,并利用循环不断更新显示窗口内的内容直到按下键盘上的'q'键为止。每当发现有效的目标时就会在其周围画上绿色轮廓线并将对应的身份号码标注出来[^2]。
阅读全文