Aruco DetectMarkers实现Emgu C#

时间:2018-05-15 13:30:52

标签: c# visual-studio emgucv aruco

我想使用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已有默认值。这些默认值是不正常还是我有其他原因导致这些错误?

非常感谢帮助!

2 个答案:

答案 0 :(得分:0)

我再次调查了一遍。在调用You uploaded an APK that is not signed with the upload certificate. You must use the same certificate. The upload certificate has fingerprint: [ SHA1: FD:90:0F:B2:C6:8D:CD:21:43:8F:19:10:D6:4E:7E:14:4C:DD:A0:EA ] and the certificate used to sign the APK that you uploaded have fingerprint: [ SHA1: 14:A0:7F:6A:D5:36:59:3F:67:4B:F2:E6:5D:D9:E7:49:9B:58:C2:04 ]函数之前,我声明DetectMarkers的所有变量,就像我在代码的注释部分中使用一些变量一样。所以现在我声明Parameters具有的每个变量。我只是给它默认值。现在它有效。

答案 1 :(得分:0)

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

出现这些错误的原因是,new DetectorParameters();没有使用默认值创建新的参数对象。

您可以使用DetectorParameters.GetDefault();来代替自己设置每个参数,然后在需要除默认值以外的其他内容时更新特定参数。

所以只需替换:

DetectorParameters Parameters = new DetectorParameters();

具有:

DetectorParameters Parameters = DetectorParameters.GetDefault();