USB摄像头实时检测ArUco的python代码
本文给出一个用 Python 实现的实时检测 ArUco 标识的程序,分为基础版和升级版,在ubuntu下连接USB摄像头就能实现实时检测,VMware虚拟机和树莓派都实测可用。
本文给出一个用 Python 实现的实时检测 ArUco 标识的程序,分为基础版和升级版,在ubuntu下连接USB摄像头就能实现实时检测,VMware虚拟机和树莓派都实测可用。
1、基础版
当在Python中实时检测ArUco标识物时,可以使用opencv-python和opencv-contrib-python库来实现。opencv-python提供基本的计算机视觉功能,而opencv-contrib-python则提供了额外的功能,包括ArUco标识物的检测。
首先,确保已经安装了opencv-python和opencv-contrib-python库。可以使用以下命令进行安装:
pip install opencv-python opencv-contrib-python
然后,创建一个Python文件,并导入所需的库:
import cv2
import cv2.aruco as aruco
接下来,初始化摄像头对象以读取视频流,并设置相关参数:
cap = cv2.VideoCapture(0)
cap.set(3, 640) # 设置视频宽度为640像素
cap.set(4, 480) # 设置视频高度为480像素
然后,定义ArUco字典对象,以及其他检测参数:
# 创建ArUco字典,可根据检测的字典家族修改参数
aruco_dict = aruco.getPredefinedDictionary(aruco.DICT_4X4_50)
# 设置ArUco标记的大小
marker_size = 5
# 创建ArUco参数
parameters = aruco.DetectorParameters()
在主循环中,通过读取每一帧图像,并调用ArUco检测函数,来实时检测ArUco标识物:
while True:
# 读取视频流的一帧图像
ret, frame = cap.read()
# 将彩色图像转换为灰度图像
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# 检测ArUco标识物
corners, ids, rejected = aruco.detectMarkers(gray, aruco_dict, parameters=parameters)
if len(corners) > 0:
# 绘制检测到的ArUco标识物的边界框
aruco.drawDetectedMarkers(frame, corners, ids)
# 显示图像
cv2.imshow('ArUco Detection', frame)
# 按下ESC键退出程序
if cv2.waitKey(1) == 27:
break
# 释放摄像头对象和关闭窗口
cap.release()
cv2.destroyAllWindows()
相关解释:
在主循环中,首先读取视频流的一帧图像,然后将该图像转换为灰度图像。接下来,通过调用aruco.detectMarkers()函数来检测ArUco标识物。detectMarkers()函数返回检测到的标识物的角点坐标、标识物的ID,以及未被识别的标识物。
如果检测到了标识物,可以使用aruco.drawDetectedMarkers()函数将标识物的边界框绘制在图像上。最后,使用cv2.imshow()函数来显示图像。
在每一次循环中,通过调用cv2.waitKey(1)捕获键盘输入,如果按下了ESC键,就退出循环。
最后,释放摄像头对象和关闭窗口。
2、升级版
升级版的程序主要添加了以下功能:
1)在检测到标记时,输出相关的打印信息,包括检测到标记,并输出标记中心点与图像中心点的偏差
2)在未检测到标记时,输出相关的打印信息,指示未检测到标记
3)对图像进行放大,增加了可视性
4)添加了程序主循环的计时统计,包括总帧数、平均帧时间、最小帧时间和最大帧时间,最后打印统计结果
5)可自由调节分辨率,且分辨率实时显示在窗口上
效果图:
升级版程序下载链接:
USB摄像头实时检测ArUco的python代码树莓派ubuntu可用
(给位大佬走过路过行行好帮我刷点下载量吧呜呜呜~)
注:
在线Apriltag / ArUco标签生成器:
Online ArUco markers generator
更多推荐
所有评论(0)