using namespace std;
-static inline bool readWrite(DetectorParameters ¶ms, const Ptr<FileNode>& readNode,
- const Ptr<FileStorage>& writeStorage = nullptr) {
- CV_Assert(!readNode.empty() || !writeStorage.empty());
+static inline bool readWrite(DetectorParameters ¶ms, const FileNode* readNode,
+ FileStorage* writeStorage = nullptr)
+{
+ CV_Assert(readNode || writeStorage);
bool check = false;
- check |= readWriteParameter("adaptiveThreshWinSizeMin", params.adaptiveThreshWinSizeMin, *readNode, *writeStorage);
- check |= readWriteParameter("adaptiveThreshWinSizeMax", params.adaptiveThreshWinSizeMax, *readNode, *writeStorage);
- check |= readWriteParameter("adaptiveThreshWinSizeStep", params.adaptiveThreshWinSizeStep, *readNode, *writeStorage);
- check |= readWriteParameter("adaptiveThreshConstant", params.adaptiveThreshConstant, *readNode, *writeStorage);
- check |= readWriteParameter("minMarkerPerimeterRate", params.minMarkerPerimeterRate, *readNode, *writeStorage);
- check |= readWriteParameter("maxMarkerPerimeterRate", params.maxMarkerPerimeterRate, *readNode, *writeStorage);
+ check |= readWriteParameter("adaptiveThreshWinSizeMin", params.adaptiveThreshWinSizeMin, readNode, writeStorage);
+ check |= readWriteParameter("adaptiveThreshWinSizeMax", params.adaptiveThreshWinSizeMax, readNode, writeStorage);
+ check |= readWriteParameter("adaptiveThreshWinSizeStep", params.adaptiveThreshWinSizeStep, readNode, writeStorage);
+ check |= readWriteParameter("adaptiveThreshConstant", params.adaptiveThreshConstant, readNode, writeStorage);
+ check |= readWriteParameter("minMarkerPerimeterRate", params.minMarkerPerimeterRate, readNode, writeStorage);
+ check |= readWriteParameter("maxMarkerPerimeterRate", params.maxMarkerPerimeterRate, readNode, writeStorage);
check |= readWriteParameter("polygonalApproxAccuracyRate", params.polygonalApproxAccuracyRate,
- *readNode, *writeStorage);
- check |= readWriteParameter("minCornerDistanceRate", params.minCornerDistanceRate, *readNode, *writeStorage);
- check |= readWriteParameter("minDistanceToBorder", params.minDistanceToBorder, *readNode, *writeStorage);
- check |= readWriteParameter("minMarkerDistanceRate", params.minMarkerDistanceRate, *readNode, *writeStorage);
- check |= readWriteParameter("cornerRefinementMethod", params.cornerRefinementMethod, *readNode, *writeStorage);
- check |= readWriteParameter("cornerRefinementWinSize", params.cornerRefinementWinSize, *readNode, *writeStorage);
+ readNode, writeStorage);
+ check |= readWriteParameter("minCornerDistanceRate", params.minCornerDistanceRate, readNode, writeStorage);
+ check |= readWriteParameter("minDistanceToBorder", params.minDistanceToBorder, readNode, writeStorage);
+ check |= readWriteParameter("minMarkerDistanceRate", params.minMarkerDistanceRate, readNode, writeStorage);
+ check |= readWriteParameter("cornerRefinementMethod", params.cornerRefinementMethod, readNode, writeStorage);
+ check |= readWriteParameter("cornerRefinementWinSize", params.cornerRefinementWinSize, readNode, writeStorage);
check |= readWriteParameter("cornerRefinementMaxIterations", params.cornerRefinementMaxIterations,
- *readNode, *writeStorage);
+ readNode, writeStorage);
check |= readWriteParameter("cornerRefinementMinAccuracy", params.cornerRefinementMinAccuracy,
- *readNode, *writeStorage);
- check |= readWriteParameter("markerBorderBits", params.markerBorderBits, *readNode, *writeStorage);
+ readNode, writeStorage);
+ check |= readWriteParameter("markerBorderBits", params.markerBorderBits, readNode, writeStorage);
check |= readWriteParameter("perspectiveRemovePixelPerCell", params.perspectiveRemovePixelPerCell,
- *readNode, *writeStorage);
+ readNode, writeStorage);
check |= readWriteParameter("perspectiveRemoveIgnoredMarginPerCell", params.perspectiveRemoveIgnoredMarginPerCell,
- *readNode, *writeStorage);
+ readNode, writeStorage);
check |= readWriteParameter("maxErroneousBitsInBorderRate", params.maxErroneousBitsInBorderRate,
- *readNode, *writeStorage);
- check |= readWriteParameter("minOtsuStdDev", params.minOtsuStdDev, *readNode, *writeStorage);
- check |= readWriteParameter("errorCorrectionRate", params.errorCorrectionRate, *readNode, *writeStorage);
+ readNode, writeStorage);
+ check |= readWriteParameter("minOtsuStdDev", params.minOtsuStdDev, readNode, writeStorage);
+ check |= readWriteParameter("errorCorrectionRate", params.errorCorrectionRate, readNode, writeStorage);
// new aruco 3 functionality
- check |= readWriteParameter("useAruco3Detection", params.useAruco3Detection, *readNode, *writeStorage);
- check |= readWriteParameter("minSideLengthCanonicalImg", params.minSideLengthCanonicalImg, *readNode, *writeStorage);
+ check |= readWriteParameter("useAruco3Detection", params.useAruco3Detection, readNode, writeStorage);
+ check |= readWriteParameter("minSideLengthCanonicalImg", params.minSideLengthCanonicalImg, readNode, writeStorage);
check |= readWriteParameter("minMarkerLengthRatioOriginalImg", params.minMarkerLengthRatioOriginalImg,
- *readNode, *writeStorage);
+ readNode, writeStorage);
return check;
}
-bool DetectorParameters::readDetectorParameters(const FileNode& fn) {
- if(fn.empty())
+bool DetectorParameters::readDetectorParameters(const FileNode& fn)
+{
+ if (fn.empty())
return false;
- Ptr<FileNode> pfn = makePtr<FileNode>(fn);
- return readWrite(*this, pfn);
+ return readWrite(*this, &fn);
}
-bool DetectorParameters::writeDetectorParameters(const Ptr<FileStorage>& fs, const String& name) {
- if (fs.empty())
- return false;
- if(name.empty())
- return writeDetectorParameters(*fs);
- *fs << name << "{";
- bool res = writeDetectorParameters(*fs);
- *fs << "}";
+bool DetectorParameters::writeDetectorParameters(FileStorage& fs, const String& name)
+{
+ CV_Assert(fs.isOpened());
+ if (!name.empty())
+ fs << name << "{";
+ bool res = readWrite(*this, nullptr, &fs);
+ if (!name.empty())
+ fs << "}";
return res;
}
-bool DetectorParameters::writeDetectorParameters(FileStorage &fs) {
- if (!fs.isOpened())
- return false;
- return readWrite(*this, nullptr, makePtr<FileStorage>(fs));
-}
-
-static inline bool readWrite(RefineParameters& refineParameters, const Ptr<FileNode>& readNode,
- const Ptr<FileStorage>& writeStorage = nullptr) {
- CV_Assert(!readNode.empty() || !writeStorage.empty());
+static inline bool readWrite(RefineParameters& refineParameters, const FileNode* readNode,
+ FileStorage* writeStorage = nullptr)
+{
+ CV_Assert(readNode || writeStorage);
bool check = false;
- check |= readWriteParameter("minRepDistance", refineParameters.minRepDistance, *readNode, *writeStorage);
- check |= readWriteParameter("errorCorrectionRate", refineParameters.errorCorrectionRate, *readNode, *writeStorage);
- check |= readWriteParameter("checkAllOrders", refineParameters.checkAllOrders, *readNode, *writeStorage);
+ check |= readWriteParameter("minRepDistance", refineParameters.minRepDistance, readNode, writeStorage);
+ check |= readWriteParameter("errorCorrectionRate", refineParameters.errorCorrectionRate, readNode, writeStorage);
+ check |= readWriteParameter("checkAllOrders", refineParameters.checkAllOrders, readNode, writeStorage);
return check;
}
minRepDistance(_minRepDistance), errorCorrectionRate(_errorCorrectionRate),
checkAllOrders(_checkAllOrders){}
-bool RefineParameters::readRefineParameters(const FileNode &fn) {
- if(fn.empty())
+bool RefineParameters::readRefineParameters(const FileNode &fn)
+{
+ if (fn.empty())
return false;
- Ptr<FileNode> pfn = makePtr<FileNode>(fn);
- return readWrite(*this, pfn);
+ return readWrite(*this, &fn);
}
-bool RefineParameters::writeRefineParameters(FileStorage &fs) {
- if(!fs.isOpened())
- return false;
- return readWrite(*this, nullptr, makePtr<FileStorage>(fs));
-}
-
-bool RefineParameters::writeRefineParameters(const Ptr<FileStorage>& fs, const String& name) {
- if(fs.empty())
- return false;
- if(name.empty())
- return writeRefineParameters(*fs);
- *fs << name << "{";
- bool res = writeRefineParameters(*fs);
- *fs << "}";
+bool RefineParameters::writeRefineParameters(FileStorage& fs, const String& name)
+{
+ CV_Assert(fs.isOpened());
+ if (!name.empty())
+ fs << name << "{";
+ bool res = readWrite(*this, nullptr, &fs);
+ if (!name.empty())
+ fs << "}";
return res;
}
}
}
-void ArucoDetector::write(FileStorage &fs) const {
- Ptr<FileStorage> pfs = makePtr<FileStorage>(fs);
- arucoDetectorImpl->dictionary.writeDictionary(pfs);
+void ArucoDetector::write(FileStorage &fs) const
+{
+ arucoDetectorImpl->dictionary.writeDictionary(fs);
arucoDetectorImpl->detectorParams.writeDetectorParameters(fs);
arucoDetectorImpl->refineParams.writeRefineParameters(fs);
}