Merge pull request #23017 from asmorkalov:as/qrcode_valgrind

Valgrind issues fix in QRCode detector.
pull/23028/head
Alexander Smorkalov 2 years ago committed by GitHub
commit 734fb18c4d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 17
      modules/objdetect/src/qrcode.cpp

@ -2340,9 +2340,8 @@ static inline std::pair<int, int> matchPatternPoints(const vector<Point> &finder
double QRDecode::getNumModules() { double QRDecode::getNumModules() {
vector<vector<Point>> finderPatterns; vector<vector<Point>> finderPatterns;
double numModulesX = 0., numModulesY = 0.; double numModulesX = 0., numModulesY = 0.;
bool flag = findPatternsVerticesPoints(finderPatterns); if (findPatternsVerticesPoints(finderPatterns)) {
if (flag) { double pattern_distance[4] = {0.,0.,0.,0.};
double pattern_distance[4];
for (auto& pattern : finderPatterns) { for (auto& pattern : finderPatterns) {
auto indexes = matchPatternPoints(pattern, original_points); auto indexes = matchPatternPoints(pattern, original_points);
if (indexes == std::make_pair(-1, -1)) if (indexes == std::make_pair(-1, -1))
@ -2558,8 +2557,9 @@ bool QRDecode::versionDefinition()
bool useFinderPattern = false; bool useFinderPattern = false;
const double thresholdFinderPattern = 0.2; const double thresholdFinderPattern = 0.2;
const double roundingError = abs(numModulesByFinderPattern - cvRound(numModulesByFinderPattern)); const double roundingError = abs(numModulesByFinderPattern - cvRound(numModulesByFinderPattern));
if (cvRound(versionByFinderPattern) >= 1 && versionByFinderPattern <= 6 && transition_x != transition_y) {
if (roundingError < thresholdFinderPattern) if (cvRound(versionByFinderPattern) >= 1 && versionByFinderPattern <= 6. &&
transition_x != transition_y && roundingError < thresholdFinderPattern) {
useFinderPattern = true; useFinderPattern = true;
} }
@ -2775,7 +2775,12 @@ bool QRDecode::curvedDecodingProcess()
#endif #endif
} }
QRDecode::QRDecode(bool _useAlignmentMarkers): useAlignmentMarkers(_useAlignmentMarkers) {} QRDecode::QRDecode(bool _useAlignmentMarkers):
useAlignmentMarkers(_useAlignmentMarkers),
version(0),
version_size(0),
test_perspective_size(0.f)
{}
std::string QRCodeDetector::decode(InputArray in, InputArray points, std::string QRCodeDetector::decode(InputArray in, InputArray points,
OutputArray straight_qrcode) OutputArray straight_qrcode)

Loading…
Cancel
Save