diff --git a/modules/face/include/opencv2/face/facemark.hpp b/modules/face/include/opencv2/face/facemark.hpp index 70849bc4b..d0f456d67 100644 --- a/modules/face/include/opencv2/face/facemark.hpp +++ b/modules/face/include/opencv2/face/facemark.hpp @@ -74,8 +74,8 @@ public: @endcode */ CV_WRAP virtual bool fit( InputArray image, - InputArray faces, - OutputArrayOfArrays landmarks ) = 0; + const std::vector& faces, + CV_OUT std::vector >& landmarks ) = 0; }; /* Facemark*/ diff --git a/modules/face/include/opencv2/face/facemarkAAM.hpp b/modules/face/include/opencv2/face/facemarkAAM.hpp index 6f96e4a22..d0a5dca08 100644 --- a/modules/face/include/opencv2/face/facemarkAAM.hpp +++ b/modules/face/include/opencv2/face/facemarkAAM.hpp @@ -146,7 +146,7 @@ public: }; //! overload with additional Config structures - virtual bool fitConfig( InputArray image, InputArray roi, OutputArrayOfArrays _landmarks, const std::vector &runtime_params ) = 0; + virtual bool fitConfig( InputArray image, const std::vector& roi, std::vector >& _landmarks, const std::vector &runtime_params ) = 0; //! initializer diff --git a/modules/face/src/face_alignmentimpl.hpp b/modules/face/src/face_alignmentimpl.hpp index 352e0f60b..d6cbe0817 100644 --- a/modules/face/src/face_alignmentimpl.hpp +++ b/modules/face/src/face_alignmentimpl.hpp @@ -73,7 +73,7 @@ public: void loadModel(String fs) CV_OVERRIDE; bool setFaceDetector(FN_FaceDetector f, void* userdata) CV_OVERRIDE; bool getFaces(InputArray image, OutputArray faces) CV_OVERRIDE; - bool fit(InputArray image, InputArray faces, OutputArrayOfArrays landmarks ) CV_OVERRIDE; + bool fit(InputArray image, const std::vector& faces, CV_OUT std::vector >& landmarks ) CV_OVERRIDE; void training(String imageList, String groundTruth); bool training(vector& images, vector< vector >& landmarks,string filename,Size scale,string modelFilename) CV_OVERRIDE; // Destructor for the class. diff --git a/modules/face/src/facemarkAAM.cpp b/modules/face/src/facemarkAAM.cpp index 6b19170f0..c08660226 100644 --- a/modules/face/src/facemarkAAM.cpp +++ b/modules/face/src/facemarkAAM.cpp @@ -103,12 +103,11 @@ public: bool getData(void * items) CV_OVERRIDE; - bool fitConfig( InputArray image, InputArray roi, OutputArrayOfArrays _landmarks, const std::vector &runtime_params ) CV_OVERRIDE; + bool fitConfig( InputArray image, const std::vector& roi, std::vector >& _landmarks, const std::vector &runtime_params ) CV_OVERRIDE; protected: - bool fit( InputArray image, InputArray faces, OutputArrayOfArrays landmarks ) CV_OVERRIDE; - //bool fit( InputArray image, InputArray faces, InputOutputArray landmarks, void * runtime_params);//!< from many ROIs + bool fit( InputArray image, const std::vector& faces, CV_OUT std::vector >& landmarks ) CV_OVERRIDE; bool fitImpl( const Mat image, std::vector& landmarks,const Mat R,const Point2f T,const float scale, const int sclIdx=0 ); bool addTrainingSample(InputArray image, InputArray landmarks) CV_OVERRIDE; @@ -323,19 +322,18 @@ void FacemarkAAMImpl::training(void* parameters){ if(params.verbose) printf("Training is completed\n"); } -bool FacemarkAAMImpl::fit( InputArray image, InputArray roi, OutputArrayOfArrays _landmarks ) +bool FacemarkAAMImpl::fit( InputArray image, const std::vector& roi, CV_OUT std::vector >& _landmarks ) { std::vector config; // empty return fitConfig(image, roi, _landmarks, config); } -bool FacemarkAAMImpl::fitConfig( InputArray image, InputArray roi, OutputArrayOfArrays _landmarks, const std::vector &configs ) +bool FacemarkAAMImpl::fitConfig( InputArray image, const std::vector& roi, std::vector >& _landmarks, const std::vector &configs ) { - std::vector & faces = *(std::vector *)roi.getObj(); + const std::vector & faces = roi; if(faces.size()<1) return false; - std::vector > & landmarks = - *(std::vector >*) _landmarks.getObj(); + std::vector > & landmarks = _landmarks; landmarks.resize(faces.size()); Mat img = image.getMat(); diff --git a/modules/face/src/facemarkLBF.cpp b/modules/face/src/facemarkLBF.cpp index 501922865..286d2f586 100644 --- a/modules/face/src/facemarkLBF.cpp +++ b/modules/face/src/facemarkLBF.cpp @@ -115,7 +115,7 @@ public: protected: - bool fit( InputArray image, InputArray faces, OutputArrayOfArrays landmarks ) CV_OVERRIDE;//!< from many ROIs + bool fit( InputArray image, const std::vector & faces, std::vector > & landmarks ) CV_OVERRIDE;//!< from many ROIs bool fitImpl( const Mat image, std::vector & landmarks );//!< from a face bool addTrainingSample(InputArray image, InputArray landmarks) CV_OVERRIDE; @@ -370,14 +370,12 @@ void FacemarkLBFImpl::training(void* parameters){ isModelTrained = true; } -bool FacemarkLBFImpl::fit( InputArray image, InputArray roi, OutputArrayOfArrays _landmarks ) +bool FacemarkLBFImpl::fit( InputArray image, const std::vector & roi, CV_OUT std::vector > & _landmarks ) { - // FIXIT - std::vector & faces = *(std::vector *)roi.getObj(); + const std::vector & faces = roi; if (faces.empty()) return false; - std::vector > & landmarks = - *(std::vector >*) _landmarks.getObj(); + std::vector > & landmarks = _landmarks; landmarks.resize(faces.size()); diff --git a/modules/face/src/getlandmarks.cpp b/modules/face/src/getlandmarks.cpp index bb92082ef..262f4180a 100644 --- a/modules/face/src/getlandmarks.cpp +++ b/modules/face/src/getlandmarks.cpp @@ -168,15 +168,15 @@ void FacemarkKazemiImpl :: loadModel(String filename){ f.close(); isModelLoaded = true; } -bool FacemarkKazemiImpl::fit(InputArray img, InputArray roi, OutputArrayOfArrays landmarks){ +bool FacemarkKazemiImpl::fit(InputArray img, const std::vector& roi, CV_OUT std::vector >& landmarks){ if(!isModelLoaded){ String error_message = "No model loaded. Aborting...."; CV_Error(Error::StsBadArg, error_message); return false; } Mat image = img.getMat(); - std::vector & faces = *(std::vector*)roi.getObj(); - std::vector > & shapes = *(std::vector >*) landmarks.getObj(); + const std::vector & faces = roi; + std::vector > & shapes = landmarks; shapes.resize(faces.size()); if(image.empty()){