Add overloaded cv::PCACompute() that returns also the eigenvalues. Useful for Java...
authorcatree <catree.catreus@outlook.com>
Fri, 13 Jul 2018 13:05:54 +0000 (15:05 +0200)
committercatree <catree.catreus@outlook.com>
Fri, 13 Jul 2018 13:05:54 +0000 (15:05 +0200)
modules/core/include/opencv2/core.hpp
modules/core/src/pca.cpp

index 43da5a9..21be7d7 100644 (file)
@@ -1978,10 +1978,20 @@ CV_EXPORTS_W void calcCovarMatrix( InputArray samples, OutputArray covar,
 CV_EXPORTS_W void PCACompute(InputArray data, InputOutputArray mean,
                              OutputArray eigenvectors, int maxComponents = 0);
 
+/** wrap PCA::operator() and add eigenvalues output parameter */
+CV_EXPORTS_AS(PCACompute2) void PCACompute(InputArray data, InputOutputArray mean,
+                                           OutputArray eigenvectors, OutputArray eigenvalues,
+                                           int maxComponents = 0);
+
 /** wrap PCA::operator() */
 CV_EXPORTS_W void PCACompute(InputArray data, InputOutputArray mean,
                              OutputArray eigenvectors, double retainedVariance);
 
+/** wrap PCA::operator() and add eigenvalues output parameter */
+CV_EXPORTS_AS(PCACompute2) void PCACompute(InputArray data, InputOutputArray mean,
+                                           OutputArray eigenvectors, OutputArray eigenvalues,
+                                           double retainedVariance);
+
 /** wrap PCA::project */
 CV_EXPORTS_W void PCAProject(InputArray data, InputArray mean,
                              InputArray eigenvectors, OutputArray result);
index 5fdce55..0625419 100644 (file)
@@ -361,6 +361,19 @@ void cv::PCACompute(InputArray data, InputOutputArray mean,
 }
 
 void cv::PCACompute(InputArray data, InputOutputArray mean,
+                    OutputArray eigenvectors, OutputArray eigenvalues,
+                    int maxComponents)
+{
+    CV_INSTRUMENT_REGION()
+
+    PCA pca;
+    pca(data, mean, 0, maxComponents);
+    pca.mean.copyTo(mean);
+    pca.eigenvectors.copyTo(eigenvectors);
+    pca.eigenvalues.copyTo(eigenvalues);
+}
+
+void cv::PCACompute(InputArray data, InputOutputArray mean,
                     OutputArray eigenvectors, double retainedVariance)
 {
     CV_INSTRUMENT_REGION()
@@ -371,6 +384,19 @@ void cv::PCACompute(InputArray data, InputOutputArray mean,
     pca.eigenvectors.copyTo(eigenvectors);
 }
 
+void cv::PCACompute(InputArray data, InputOutputArray mean,
+                    OutputArray eigenvectors, OutputArray eigenvalues,
+                    double retainedVariance)
+{
+    CV_INSTRUMENT_REGION()
+
+    PCA pca;
+    pca(data, mean, 0, retainedVariance);
+    pca.mean.copyTo(mean);
+    pca.eigenvectors.copyTo(eigenvectors);
+    pca.eigenvalues.copyTo(eigenvalues);
+}
+
 void cv::PCAProject(InputArray data, InputArray mean,
                     InputArray eigenvectors, OutputArray result)
 {