\r
virtual int test(const Mat& img) = 0;\r
\r
- int CheckNorm(const Mat& m1, const Mat& m2);\r
+ int CheckNorm(const Mat& m1, const Mat& m2); \r
+ int ChechSimilarity(const Mat& m1, const Mat& m2);\r
};\r
\r
\r
}\r
}\r
\r
+int CV_GpuImageProcTest::ChechSimilarity(const Mat& m1, const Mat& m2)\r
+{\r
+ Mat diff;\r
+ cv::matchTemplate(m1, m2, diff, CV_TM_CCORR_NORMED);\r
+\r
+ float err = abs(diff.at<float>(0, 0) - 1.f);\r
+\r
+ if (err > 1e-3f)\r
+ return CvTS::FAIL_INVALID_OUTPUT;\r
+\r
+ return CvTS::OK;\r
+}\r
+\r
void CV_GpuImageProcTest::run( int )\r
{\r
//load image\r
{\r
ts->printf(CvTS::LOG, "Interpolation: %s\n", interpolations_str[i]);\r
\r
- Mat cpu_res;\r
- cv::resize(img, cpu_res, Size(), 0.5, 0.5, interpolations[i]);\r
+ Mat cpu_res1, cpu_res2;\r
+ cv::resize(img, cpu_res1, Size(), 2.0, 2.0, interpolations[i]);\r
+ cv::resize(cpu_res1, cpu_res2, Size(), 0.5, 0.5, interpolations[i]);\r
\r
- GpuMat gpu1(img), gpu_res;\r
- cv::gpu::resize(gpu1, gpu_res, Size(), 0.5, 0.5, interpolations[i]);\r
+ GpuMat gpu1(img), gpu_res1, gpu_res2;\r
+ cv::gpu::resize(gpu1, gpu_res1, Size(), 2.0, 2.0, interpolations[i]);\r
+ cv::gpu::resize(gpu_res1, gpu_res2, Size(), 0.5, 0.5, interpolations[i]);\r
\r
- if (CheckNorm(cpu_res, gpu_res) != CvTS::OK)\r
- test_res = CvTS::FAIL_GENERIC;\r
+ switch (img.depth())\r
+ {\r
+ case CV_8U: \r
+ if (ChechSimilarity(cpu_res2, gpu_res2) != CvTS::OK)\r
+ test_res = CvTS::FAIL_GENERIC;\r
+ break;\r
+ }\r
}\r
\r
return test_res;\r