int cpu_time = static_cast<int>(cpu_elapsed_ / getTickFrequency() * 1000.0);\r
int gpu_time = static_cast<int>(gpu_elapsed_ / getTickFrequency() * 1000.0);\r
\r
- double speedup = static_cast<double>(cpu_elapsed_) / gpu_elapsed_;\r
+ double speedup = static_cast<double>(cpu_elapsed_) / std::max((int64)1, gpu_elapsed_);\r
speedup_total_ += speedup;\r
\r
printItem(cpu_time, gpu_time, speedup);\r
{\r
cout << setiosflags(ios_base::fixed);\r
cout << "\naverage GPU speedup: x" \r
- << setprecision(3) << speedup_total_ / num_subtests_called_ \r
+ << setprecision(3) << speedup_total_ / std::max(1, num_subtests_called_) \r
<< endl;\r
cout << resetiosflags(ios_base::fixed);\r
}\r
d_surf(d_src1, gpu::GpuMat(), d_keypoints1);\r
d_surf(d_src2, gpu::GpuMat(), d_keypoints2);\r
GPU_OFF;\r
+}\r
+\r
+\r
+TEST(BruteForceMatcher)\r
+{\r
+ RNG rng(0);\r
+\r
+ // Init CPU matcher\r
+\r
+ int desc_len = 128;\r
+ int num_trains = rng.uniform(1, 5);\r
+\r
+ BruteForceMatcher< L2<float> > matcher;\r
+\r
+ Mat query; \r
+ gen(query, rng.uniform(100, 300), desc_len, CV_32F, 0, 10);\r
+\r
+ vector<Mat> trains(num_trains);\r
+ for (int i = 0; i < num_trains; ++i)\r
+ {\r
+ Mat train; \r
+ gen(train, rng.uniform(100, 300), desc_len, CV_32F, 0, 10);\r
+ trains[i] = train;\r
+ }\r
+ matcher.add(trains);\r
+\r
+ // Init GPU matcher\r
+\r
+ gpu::BruteForceMatcher_GPU< L2<float> > d_matcher;\r
+\r
+ gpu::GpuMat d_query(query);\r
+\r
+ vector<gpu::GpuMat> d_trains(num_trains);\r
+ for (int i = 0; i < num_trains; ++i)\r
+ {\r
+ d_trains[i] = trains[i];\r
+ }\r
+ d_matcher.add(d_trains);\r
+\r
+ // Output\r
+ vector< vector<DMatch> > matches(1);\r
+ vector< vector<DMatch> > d_matches(1);\r
+\r
+ SUBTEST << "match";\r
+\r
+ CPU_ON;\r
+ matcher.match(query, matches[0]);\r
+ CPU_OFF;\r
+\r
+ GPU_ON;\r
+ d_matcher.match(d_query, d_matches[0]);\r
+ GPU_OFF;\r
+\r
+ SUBTEST << "knnMatch";\r
+ int knn = rng.uniform(3, 10);\r
+\r
+ CPU_ON;\r
+ matcher.knnMatch(query, matches, knn);\r
+ CPU_OFF;\r
+\r
+ GPU_ON;\r
+ d_matcher.knnMatch(d_query, d_matches, knn);\r
+ GPU_OFF;\r
+\r
+ SUBTEST << "radiusMatch";\r
+ float max_distance = rng.uniform(25.0f, 65.0f);\r
+\r
+ CPU_ON;\r
+ matcher.radiusMatch(query, matches, max_distance);\r
+ CPU_OFF;\r
+\r
+ GPU_ON;\r
+ d_matcher.radiusMatch(d_query, d_matches, max_distance);\r
+ GPU_OFF;\r
}
\ No newline at end of file