0

我想使用该detectMarkers功能来检测 ArUco Markers。我正在使用 Emgu 用 c# 编写代码。使用该功能时出现多个错误。我正在关注此链接https://docs.opencv.org/3.4/d5/dae/tutorial_aruco_detection.html中的示例。这是我的代码:

Dictionary.PredefinedDictionaryName name = new Dictionary.PredefinedDictionaryName();
Dictionary Dict = new Dictionary(name);
VectorOfVectorOfPointF Corners = new VectorOfVectorOfPointF();
VectorOfInt Ids = new VectorOfInt();
DetectorParameters Parameters = new DetectorParameters();

//If I uncomment this I get rid of some errors but new errors arise
/*
Parameters.AdaptiveThreshWinSizeMin = 5;
Parameters.AdaptiveThreshWinSizeMax = 21;
Parameters.AdaptiveThreshWinSizeStep = 4;
*/

VectorOfVectorOfPointF Rejected = new VectorOfVectorOfPointF();
ArucoInvoke.DetectMarkers(imgOriginal, Dict, Corners, Ids, Parameters, Rejected);

注释三行的错误是

CvException: OpenCV: params->adaptiveThreshWinSizeMin >= 3 && params->adaptiveThreshWinSizeMax >= 3

没有注释这三行,它给出了另一个错误

OpenCV: minPerimeterRate > 0 && maxPerimeterRate > 0 && accuracyRate > 0 && minCornerDistanceRate >= 0 && minDistanceToBorder >= 0

是不是我需要设置各种默认值DetectorParameters?据我在文档中看到,DetectorParameters. 这些默认值不正确还是有其他原因导致我收到这些错误?

帮助真的很感激!

4

2 回答 2

0

我又看了一遍。在调用DetectMarkers函数之前,我声明所有变量,Parameters就像我在代码的注释部分中所做的那样,使用一些变量。所以现在我声明了所有的变量Parameters。我只是给它默认值。现在它起作用了。

于 2018-05-28T15:20:43.413 回答
0

我最近遇到了同样的问题,并想出了另一个解决方案。

您收到这些错误的原因是因为new DetectorParameters();没有创建具有默认值的新参数对象。

DetectorParameters.GetDefault();如果您需要除默认值以外的其他参数,您可以使用 ,然后更新特定参数,而不是自己设置每个参数。

所以只需替换:

DetectorParameters Parameters = new DetectorParameters();

和:

DetectorParameters Parameters = DetectorParameters.GetDefault();
于 2020-04-19T18:54:01.313 回答