首页 > 编程问答 >OpenCV aruco 标记检测不起作用

OpenCV aruco 标记检测不起作用

时间:2024-07-28 06:41:44浏览次数:8  
标签:python opencv computer-vision aruco

我想在 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 标记时遇到问题,原因如下:

  1. 摄像机/流问题: 验证你的摄像机流是否使用 videoURL = "http://192.168.1.200:8080/video" 正确初始化,并且你是否可以从该流中获取帧。在执行 aruco 检测之前,通过显示 frame 来检查你的摄像机是否正常工作。

  2. Aruco 字典: 你正在使用预定义的 aruco 字典 cv2.aruco.DICT_6X6_250 。确保此字典与你用于生成 aruco 标记的字典相匹配。如果你正在使用不同的字典,则需要相应地更改代码。

  3. 标记检测参数: ArucoDetector 类接受用于标记检测的参数。默认参数可能不适用于所有情况。尝试通过以下方式调整 adaptiveThreshWinSizeStep 参数: python detector = cv2.aruco.ArucoDetector(aruco_dict, cv2.aruco.DetectorParameters_create()) detector.detectorParameters.adaptiveThreshWinSizeStep = 1

  4. 标记大小和距离: aruco 标记检测的准确性取决于标记大小及其与摄像机的距离。确保标记足够大并且在摄像机的视野范围内。

  5. 光照条件: 光照条件差会影响 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

相关文章

  • 当我们创建一个在 https 服务器上获取和发送数据的 python 应用程序时,我们应该如何处
    python脚本使用Urllib3,我的服务器是在Node.js上编写的脚本。我担心(并且不清楚)证书:我是否需要将我的python应用程序上的证书另存为变量?例如我这样做了,http=urllib3.PoolManager(cert_reqs="CERT_REQUIRED",ca_certs='client-cert.pem')并且我不知道......
  • 使用 Python 进行 Web 抓取以获取数据 NoneType ERROR
    我正在努力为我的学校项目获取美元和价格。所以我决定为此使用网络抓取,但我有一个问题。当我尝试在服务器上使用我的代码时,它给我NoneType错误。它可以在googlecolab上使用,但我无法在我的电脑或服务器上使用。我该如何解决这个问题?网页抓取代码;defdolar():he......
  • Python 请求 - response.json() 未按预期工作
    我正在尝试从Python的requests模块调用API。在邮递员上,返回的响应标头中的Content-Type是application/json;charset=utf-8,响应json数据是我期望的样子。但是,在python上的API的get方法之后运行response.json()会抛出错误simplejson.errors......
  • OpenCV 计算图像上的三角形
    我们如何计算该图像中的三角形:首先,我们需要消除颜色噪声。然后我们可以尝试cv2.Canny和cv2.findCountours。但是cv2.findCountours如何区分各个交叉形状?我尝试了这个:img=cv2.fastNlMeansDenoisingColored(img,None,6,6)kernel=cv2.getStructurin......
  • Python 中的“样板”代码?
    Google有一个Python教程,他们将样板代码描述为“不幸的”,并提供了以下示例:#!/usr/bin/python#importmodulesusedhere--sysisaverystandardoneimportsys#Gatherourcodeinamain()functiondefmain():print'Hellothere',sys.argv[1]#Command......
  • Python 3.9.1 中的 collections.abc.Callable 是否有 bug?
    Python3.9包含PEP585并弃用typing模块中的许多类型,转而支持collections.abc中的类型,现在它们支持__class_getitem__例如Callable就是这种情况。对我来说,typing.Callable和collections.abc.Ca......
  • 列表子类的 Python 类型
    我希望能够定义列表子类的内容必须是什么。该类如下所示。classA(list):def__init__(self):list.__init__(self)我想包含键入内容,以便发生以下情况。importtypingclassA(list:typing.List[str]):#Maybesomethinglikethisdef__init__(self):......
  • Python 中类型友好的委托
    考虑以下代码示例defsum(a:int,b:int):returna+bdefwrap(*args,**kwargs):#delegatetosumreturnsum(*args,**kwargs)该代码运行良好,只是类型提示丢失了。在Python中使用*args,**kwargs来实现​​委托模式是很常见的。如果有一种方法可......
  • 使用 python 支持构建自定义 vim 二进制文件
    背景Debian11vim软件包不包含python3支持。请参阅标题为“Debian11vim中不支持python-证据”的部分下面我需要vim支持python3YouCompleteMevim插件为了构建一个新的,我将vim9.0tarball下载到v......
  • 如何在Python 3.12+中正确使用泛型来提高代码质量?
    我正在尝试使用泛型来改进FastAPI应用程序中的类型注释。我有一个抽象存储库类,在其中使用泛型:fromabcimportABC,abstractmethodfromtypingimportListclassAbstractRepository[T](ABC):@abstractmethodasyncdefadd_one(self,data:dict)->T:......