float _response=0, int _octave=0, int _class_id=-1)
: pt(x, y), size(_size), angle(_angle),
response(_response), octave(_octave), class_id(_class_id) {}
+
+ size_t hash() const;
+
//! converts vector of keypoints to vector of points
static void convert(const std::vector<KeyPoint>& keypoints,
CV_OUT std::vector<Point2f>& points2f,
CV_PROP_RW int octave; //!< octave (pyramid layer) from which the keypoint has been extracted
CV_PROP_RW int class_id; //!< object class (if the keypoints need to be clustered by an object they belong to)
};
-
+
//! writes vector of keypoints to the file storage
CV_EXPORTS void write(FileStorage& fs, const string& name, const vector<KeyPoint>& keypoints);
//! reads vector of keypoints from the specified file storage node
namespace cv
{
-
+
+size_t KeyPoint::hash() const
+{
+ size_t _Val = 2166136261U, scale = 16777619U;
+ Cv32suf u;
+ u.f = pt.x; _Val = (scale * _Val) ^ u.u;
+ u.f = pt.y; _Val = (scale * _Val) ^ u.u;
+ u.f = size; _Val = (scale * _Val) ^ u.u;
+ u.f = angle; _Val = (scale * _Val) ^ u.u;
+ u.f = response; _Val = (scale * _Val) ^ u.u;
+ _Val = (scale * _Val) ^ ((size_t) octave);
+ _Val = (scale * _Val) ^ ((size_t) class_id);
+ return _Val;
+}
void write(FileStorage& fs, const string& objname, const vector<KeyPoint>& keypoints)
{