--- /dev/null
+#include "perf_precomp.hpp"
+#include "opencv2/ts/ocl_perf.hpp"
+
+#ifdef HAVE_OPENCL
+
+namespace cvtest {
+namespace ocl {
+
+enum { TYPE_5_8 =FastFeatureDetector::TYPE_5_8, TYPE_7_12 = FastFeatureDetector::TYPE_7_12, TYPE_9_16 = FastFeatureDetector::TYPE_9_16 };
+CV_ENUM(FastType, TYPE_5_8, TYPE_7_12)
+
+typedef std::tr1::tuple<string, FastType> File_Type_t;
+typedef TestBaseWithParam<File_Type_t> FASTFixture;
+
+#define FAST_IMAGES \
+ "cv/detectors_descriptors_evaluation/images_datasets/leuven/img1.png",\
+ "stitching/a3.png"
+
+OCL_PERF_TEST_P(FASTFixture, FastDetect, testing::Combine(
+ testing::Values(FAST_IMAGES),
+ FastType::all()
+ ))
+{
+ string filename = getDataPath(get<0>(GetParam()));
+ int type = get<1>(GetParam());
+ Mat mframe = imread(filename, IMREAD_GRAYSCALE);
+
+ if (mframe.empty())
+ FAIL() << "Unable to load source image " << filename;
+
+ UMat frame;
+ mframe.copyTo(frame);
+ declare.in(frame);
+
+ Ptr<FeatureDetector> fd = Algorithm::create<FeatureDetector>("Feature2D.FAST");
+ ASSERT_FALSE( fd.empty() );
+ fd->set("threshold", 20);
+ fd->set("nonmaxSuppression", true);
+ fd->set("type", type);
+ vector<KeyPoint> points;
+
+ OCL_TEST_CYCLE() fd->detect(frame, points);
+
+ SANITY_CHECK_KEYPOINTS(points);
+}
+
+} // ocl
+} // cvtest
+
+#endif // HAVE_OPENCL
OCL_TEST_CYCLE() detector(frame, mask, points);
- sort(points.begin(), points.end(), comparators::KeypointGreater());
+ std::sort(points.begin(), points.end(), comparators::KeypointGreater());
SANITY_CHECK_KEYPOINTS(points, 1e-5);
}
ORB detector(1500, 1.3f, 1);
vector<KeyPoint> points;
detector(frame, mask, points);
- sort(points.begin(), points.end(), comparators::KeypointGreater());
+ std::sort(points.begin(), points.end(), comparators::KeypointGreater());
UMat descriptors;
#include "opencv2/core.hpp"
#include "ts_gtest.h"
+#include <functional>
+
#if !(defined(LOGD) || defined(LOGI) || defined(LOGW) || defined(LOGE))
# if defined(ANDROID) && defined(USE_ANDROID_LOGGING)
# include <android/log.h>
{
template<typename T>
-struct CV_EXPORTS RectLess_
+struct CV_EXPORTS RectLess_ :
+ public std::binary_function<cv::Rect_<T>, cv::Rect_<T>, bool>
{
bool operator()(const cv::Rect_<T>& r1, const cv::Rect_<T>& r2) const
{
- return r1.x < r2.x
- || (r1.x == r2.x && r1.y < r2.y)
- || (r1.x == r2.x && r1.y == r2.y && r1.width < r2.width)
- || (r1.x == r2.x && r1.y == r2.y && r1.width == r2.width && r1.height < r2.height);
+ return r1.x < r2.x ||
+ (r1.x == r2.x && r1.y < r2.y) ||
+ (r1.x == r2.x && r1.y == r2.y && r1.width < r2.width) ||
+ (r1.x == r2.x && r1.y == r2.y && r1.width == r2.width && r1.height < r2.height);
}
};
typedef RectLess_<int> RectLess;
-struct CV_EXPORTS KeypointGreater
+struct CV_EXPORTS KeypointGreater :
+ public std::binary_function<cv::KeyPoint, cv::KeyPoint, bool>
{
bool operator()(const cv::KeyPoint& kp1, const cv::KeyPoint& kp2) const
{
- if(kp1.response > kp2.response) return true;
- if(kp1.response < kp2.response) return false;
- if(kp1.size > kp2.size) return true;
- if(kp1.size < kp2.size) return false;
- if(kp1.octave > kp2.octave) return true;
- if(kp1.octave < kp2.octave) return false;
- if(kp1.pt.y < kp2.pt.y) return false;
- if(kp1.pt.y > kp2.pt.y) return true;
+ if (kp1.response > kp2.response) return true;
+ if (kp1.response < kp2.response) return false;
+ if (kp1.size > kp2.size) return true;
+ if (kp1.size < kp2.size) return false;
+ if (kp1.octave > kp2.octave) return true;
+ if (kp1.octave < kp2.octave) return false;
+ if (kp1.pt.y < kp2.pt.y) return false;
+ if (kp1.pt.y > kp2.pt.y) return true;
return kp1.pt.x < kp2.pt.x;
}
};