我想使用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
已有默认值。这些默认值是不正常还是我有其他原因导致这些错误?
非常感谢帮助!
答案 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();