我想在 OpenCV 中检测图像中的 aruco 标记。我的OpenCV版本是4.8.0。看起来它已被其他一些功能取代,我找不到任何指南。感谢您的帮助!
# program to detect aruco markers with opencv2 4.8.0 version
import cv2
import numpy as np
# dictionary of aruco markers
aruco_dict = cv2.aruco.getPredefinedDictionary(cv2.aruco.DICT_6X6_250)
# create a video capture object from ip webcam
import cv2
videoURL = "http://192.168.1.200:8080/video"
cap = cv2.VideoCapture(videoURL)
while(True):
ret, frame = cap.read()
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# detect markers in the input image
# Create the detector with the dictionary and parameters
detector = cv2.aruco.ArucoDetector(aruco_dict)
# Now use the detectMarkers method on the detector instance
corners, ids, rejectedImgPoints = detector.detectMarkers(gray)
print(corners)
# show the output image with the markers
cv2.imshow('frame',frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
我正在使用上面的代码,但它没有检测到任何角落
我尝试了旧功能,但它似乎已被删除
代码似乎没问题,你可能在检测 aruco 标记时遇到问题,原因如下:
-
摄像机/流问题: 验证你的摄像机流是否使用
videoURL = "http://192.168.1.200:8080/video"
正确初始化,并且你是否可以从该流中获取帧。在执行 aruco 检测之前,通过显示frame
来检查你的摄像机是否正常工作。 -
Aruco 字典: 你正在使用预定义的 aruco 字典
cv2.aruco.DICT_6X6_250
。确保此字典与你用于生成 aruco 标记的字典相匹配。如果你正在使用不同的字典,则需要相应地更改代码。 -
标记检测参数:
ArucoDetector
类接受用于标记检测的参数。默认参数可能不适用于所有情况。尝试通过以下方式调整adaptiveThreshWinSizeStep
参数:python detector = cv2.aruco.ArucoDetector(aruco_dict, cv2.aruco.DetectorParameters_create()) detector.detectorParameters.adaptiveThreshWinSizeStep = 1
-
标记大小和距离: aruco 标记检测的准确性取决于标记大小及其与摄像机的距离。确保标记足够大并且在摄像机的视野范围内。
-
光照条件: 光照条件差会影响 aruco 标记检测。确保有足够的光线,并且没有过度的眩光或阴影落在标记上。
调试技巧:
-
显示灰度图像: 在
detectMarkers
函数之前,检查灰度图像gray
以确保图像清晰且可见标记。python cv2.imshow("Gray", gray)
-
绘制检测到的标记: 使用
cv2.aruco.drawDetectedMarkers
函数在图像上绘制检测到的标记和 ID 以进行可视化调试。
python
if corners:
# Draw detected markers
cv2.aruco.drawDetectedMarkers(frame, corners, ids)
-
打印检测到的 ID:
如果检测到标记,则打印
ids
以确保它们被正确识别。
通过解决这些潜在问题,你应该能够使你的 aruco 标记检测代码正常工作。
标签:python,opencv,computer-vision,aruco From: 77281145