From 1e583942b9aa15daa3d522bd6a82fad295576003 Mon Sep 17 00:00:00 2001 From: Alexander Alekhin Date: Sun, 31 Mar 2019 21:48:44 +0000 Subject: [PATCH] core(lda): don't perform calculations in constructor - exceptions from constructor will not cause destructor calls --- modules/core/src/lda.cpp | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/modules/core/src/lda.cpp b/modules/core/src/lda.cpp index 7b2562d136..c2485bf881 100644 --- a/modules/core/src/lda.cpp +++ b/modules/core/src/lda.cpp @@ -903,19 +903,19 @@ public: // given in src. This function is a port of the EigenvalueSolver in JAMA, // which has been released to public domain by The MathWorks and the // National Institute of Standards and Technology (NIST). - EigenvalueDecomposition(InputArray src, bool fallbackSymmetric = true) : + EigenvalueDecomposition() : n(0), d(NULL), e(NULL), ort(NULL), V(NULL), H(NULL) { - compute(src, fallbackSymmetric); + // nothing } // This function computes the Eigenvalue Decomposition for a general matrix // given in src. This function is a port of the EigenvalueSolver in JAMA, // which has been released to public domain by The MathWorks and the // National Institute of Standards and Technology (NIST). - void compute(InputArray src, bool fallbackSymmetric) + void compute(InputArray src, bool fallbackSymmetric = true) { CV_INSTRUMENT_REGION(); @@ -970,7 +970,8 @@ void eigenNonSymmetric(InputArray _src, OutputArray _evals, OutputArray _evects) else src64f = src; - EigenvalueDecomposition eigensystem(src64f, false); + EigenvalueDecomposition eigensystem; + eigensystem.compute(src64f, false); // EigenvalueDecomposition returns transposed and non-sorted eigenvalues std::vector eigenvalues64f; @@ -1146,7 +1147,8 @@ void LDA::lda(InputArrayOfArrays _src, InputArray _lbls) { // M = inv(Sw)*Sb Mat M; gemm(Swi, Sb, 1.0, Mat(), 0.0, M); - EigenvalueDecomposition es(M); + EigenvalueDecomposition es; + es.compute(M); _eigenvalues = es.eigenvalues(); _eigenvectors = es.eigenvectors(); // reshape eigenvalues, so they are stored by column