diff --git a/modules/features2d/include/opencv2/features2d.hpp b/modules/features2d/include/opencv2/features2d.hpp index 29f263b4aa..70fe4094b0 100644 --- a/modules/features2d/include/opencv2/features2d.hpp +++ b/modules/features2d/include/opencv2/features2d.hpp @@ -153,8 +153,8 @@ public: @param masks Masks for each input image specifying where to look for keypoints (optional). masks[i] is a mask for images[i]. */ - virtual void detect( InputArrayOfArrays images, - std::vector >& keypoints, + CV_WRAP virtual void detect( InputArrayOfArrays images, + CV_OUT std::vector >& keypoints, InputArrayOfArrays masks=noArray() ); /** @brief Computes the descriptors for a set of keypoints detected in an image (first variant) or image set @@ -182,8 +182,8 @@ public: descriptors computed for a keypoints[i]. Row j is the keypoints (or keypoints[i]) is the descriptor for keypoint j-th keypoint. */ - virtual void compute( InputArrayOfArrays images, - std::vector >& keypoints, + CV_WRAP virtual void compute( InputArrayOfArrays images, + CV_OUT CV_IN_OUT std::vector >& keypoints, OutputArrayOfArrays descriptors ); /** Detects keypoints and computes the descriptors */ @@ -196,6 +196,14 @@ public: CV_WRAP virtual int descriptorType() const; CV_WRAP virtual int defaultNorm() const; + CV_WRAP void write( const String& fileName ) const; + + CV_WRAP void read( const String& fileName ); + + virtual void write( FileStorage&) const; + + virtual void read( const FileNode&); + //! Return true if detector object is empty CV_WRAP virtual bool empty() const; }; @@ -878,7 +886,7 @@ public: returned in the distance increasing order. */ CV_WRAP void radiusMatch( InputArray queryDescriptors, InputArray trainDescriptors, - std::vector >& matches, float maxDistance, + CV_OUT std::vector >& matches, float maxDistance, InputArray mask=noArray(), bool compactResult=false ) const; /** @overload @@ -915,7 +923,7 @@ public: false, the matches vector has the same size as queryDescriptors rows. If compactResult is true, the matches vector does not contain matches for fully masked-out query descriptors. */ - void radiusMatch( InputArray queryDescriptors, std::vector >& matches, float maxDistance, + CV_WRAP void radiusMatch( InputArray queryDescriptors, CV_OUT std::vector >& matches, float maxDistance, InputArrayOfArrays masks=noArray(), bool compactResult=false ); diff --git a/modules/features2d/src/feature2d.cpp b/modules/features2d/src/feature2d.cpp index a992db7ce3..06a7f4c8ff 100644 --- a/modules/features2d/src/feature2d.cpp +++ b/modules/features2d/src/feature2d.cpp @@ -154,6 +154,26 @@ void Feature2D::detectAndCompute( InputArray, InputArray, CV_Error(Error::StsNotImplemented, ""); } +void Feature2D::write( const String& fileName ) const +{ + FileStorage fs(fileName, FileStorage::WRITE); + write(fs); +} + +void Feature2D::read( const String& fileName ) +{ + FileStorage fs(fileName, FileStorage::READ); + read(fs.root()); +} + +void Feature2D::write( FileStorage&) const +{ +} + +void Feature2D::read( const FileNode&) +{ +} + int Feature2D::descriptorSize() const { return 0; diff --git a/modules/python/src2/cv2.cpp b/modules/python/src2/cv2.cpp index aa18c793af..e69e933375 100644 --- a/modules/python/src2/cv2.cpp +++ b/modules/python/src2/cv2.cpp @@ -111,6 +111,7 @@ typedef std::vector > vector_vector_Point; typedef std::vector > vector_vector_Point2f; typedef std::vector > vector_vector_Point3f; typedef std::vector > vector_vector_DMatch; +typedef std::vector > vector_vector_KeyPoint; static PyObject* failmsgp(const char *fmt, ...) {