added several new highgui tests
authorAndrey Morozov <no@email>
Fri, 3 Jun 2011 08:33:27 +0000 (08:33 +0000)
committerAndrey Morozov <no@email>
Fri, 3 Jun 2011 08:33:27 +0000 (08:33 +0000)
modules/highgui/test/test_ffmpeg.cpp
modules/highgui/test/test_video_io.cpp

index e811eb4..b2d2edb 100644 (file)
@@ -78,19 +78,21 @@ class CV_FFmpegWriteBigVideoTest : public cvtest::BaseTest
                        const int img_c = 4096;\r
                        Size frame_s = Size(img_c, img_r);\r
                        const double fps = 30;\r
-                       const double time_sec = 1;\r
+                       const double time_sec = 2;\r
+                       const int coeff = static_cast<int>(static_cast<double>(cv::min(img_c, img_r)) / (fps * time_sec));\r
 \r
                        Mat img(img_r, img_c, CV_8UC3, Scalar::all(0));\r
                        try\r
                        {\r
-                               VideoWriter writer(string(ts->get_data_path()) + "video/output.avi",\r
-                                       CV_FOURCC('X', 'V', 'I', 'D'), fps, frame_s);\r
+                               VideoWriter writer(string(ts->get_data_path()) + "video/output.avi", CV_FOURCC('X', 'V', 'I', 'D'), fps, frame_s);\r
 \r
                                if (writer.isOpened() == false) ts->set_failed_test_info(cvtest::TS::FAIL_EXCEPTION);\r
 \r
                                for (int i = 0 ; i < static_cast<int>(fps * time_sec); i++ )\r
                                {\r
-                                       circle(img, Point2i(img_c / 2, img_r / 2), cv::min(img_r, img_c) / 2 * (i + 1), Scalar::all(255));\r
+                                       //circle(img, Point2i(img_c / 2, img_r / 2), cv::min(img_r, img_c) / 2 * (i + 1), Scalar(255, 0, 0, 0), 2);\r
+                                       rectangle(img, Point2i(coeff * i, coeff * i), Point2i(coeff * (i + 1), coeff * (i + 1)), \r
+                                               Scalar::all(255 * (1.0 - static_cast<double>(i) / (fps * time_sec * 2) )), -1); \r
                                        writer << img;\r
                                }\r
                        }\r
@@ -105,55 +107,115 @@ class CV_FFmpegWriteBigVideoTest : public cvtest::BaseTest
 string ext_from_int(int ext)\r
 {\r
        if (ext == 0) return ".png";\r
-       if (ext == 1) return ".jpg";\r
-       if (ext == 2) return ".bmp";\r
-       if (ext == 3) return ".pgm";\r
-       if (ext == 4) return ".tiff";\r
+       if (ext == 1) return ".bmp";\r
+       if (ext == 2) return ".pgm";\r
+       if (ext == 3) return ".tiff";\r
        return "";\r
 }\r
 \r
-//class CV_FFmpegWriteSequenceImageTest : public cvtest::BaseTest\r
-//{\r
-//     public:\r
-//             void run(int)\r
-//             {\r
-//                     try\r
-//                     {\r
-//                             const int img_r = 640;\r
-//                             const int img_c = 480;\r
-//                             Size frame_s = Size(img_c, img_r);\r
-//\r
-//                             for (size_t ext = 0; ext < 5; ++ext) // 0 - png, 1 - jpg, 2 - bmp, 3 - pgm, 4 - tiff\r
-//                             for (size_t k = 1; k <= 3; ++k)\r
-//                                     for (size_t num_channels = 1; num_channels <= 4; ++num_channels)\r
-//                                             for (size_t depth = CV_8U; depth <= CV_16U; ++depth)\r
-//                                             {\r
-//                                                     ts->printf(ts->LOG, "image type depth:%d   channels:%d   ext: %s\n", depth, num_channels, ext_from_int(ext).c_str());\r
-//                                                     ts->printf(ts->LOG, "creating image\n");\r
-//                                                     Mat img(img_r * k, img_c * k, CV_MAKETYPE(depth, num_channels), Scalar::all(0));\r
-//                                                     ts->printf(ts->LOG, "drawing circle\n");\r
-//                                                     circle(img, Point2i((img_c * k) / 2, (img_r * k) / 2), cv::min((img_r * k), (img_c * k)) / 4 , Scalar::all(255));\r
-//                                                     ts->printf(ts->LOG, "writing image : %s\n", string(string(ts->get_data_path()) + "readwrite/test" + ext_from_int(ext)).c_str());\r
-//                                                     imwrite(string(ts->get_data_path()) + "readwrite/test" + ext_from_int(ext), img);\r
-//                                                     ts->printf(ts->LOG, "reading test image : %s\n", string(string(ts->get_data_path()) + "readwrite/test" + ext_from_int(ext)).c_str());\r
-//                                                     Mat img_test = imread(string(ts->get_data_path()) + "readwrite/test" + ext_from_int(ext));\r
-//                                                     \r
-//                                                     CV_Assert(img.size() == img_test.size());\r
-//                                                     CV_Assert(img.type() == img_test.type());\r
-//\r
-//                                                     ts->printf(ts->LOG, "checking test image\n");\r
-//                                                     if (countNonZero(img != img_test) != 0)\r
-//                                                             ts->set_failed_test_info(cvtest::TS::FAIL_GENERIC);\r
-//                                             }\r
-//                     }\r
-//                     catch(...)\r
-//                     {\r
-//                             ts->set_failed_test_info(cvtest::TS::FAIL_EXCEPTION);\r
-//                     }\r
-//                     ts->set_failed_test_info(cvtest::TS::OK);\r
-//             }\r
-//};\r
-\r
-\r
-//TEST(Highgui_FFmpeg_WriteBigImage,         regression) { CV_FFmpegWriteBigImageTest      test; test.safe_run(); }\r
-//TEST(Highgui_FFmpeg_WriteBigVideo,         regression) { CV_FFmpegWriteBigVideoTest      test; test.safe_run(); }\r
+class CV_FFmpegWriteSequenceImageTest : public cvtest::BaseTest\r
+{\r
+       public:\r
+               void run(int)\r
+               {\r
+                       try\r
+                       {\r
+                               const int img_r = 640;\r
+                               const int img_c = 480;\r
+                               Size frame_s = Size(img_c, img_r);\r
+\r
+                               for (size_t k = 1; k <= 5; ++k)\r
+                               {\r
+                                       for (size_t ext = 0; ext < 4; ++ext) // 0 - png, 1 - bmp, 2 - pgm, 3 - tiff\r
+                                       for (size_t num_channels = 1; num_channels <= 3; num_channels+=2)\r
+                                       {\r
+                                               ts->printf(ts->LOG, "image type depth:%d   channels:%d   ext: %s\n", CV_8U, num_channels, ext_from_int(ext).c_str());\r
+                                               Mat img(img_r * k, img_c * k, CV_MAKETYPE(CV_8U, num_channels), Scalar::all(0));\r
+                                               circle(img, Point2i((img_c * k) / 2, (img_r * k) / 2), cv::min((img_r * k), (img_c * k)) / 4 , Scalar::all(255));\r
+                                               ts->printf(ts->LOG, "writing      image : %s\n", string(string(ts->get_data_path()) + "readwrite/test" + ext_from_int(ext)).c_str());\r
+                                               imwrite(string(ts->get_data_path()) + "readwrite/test" + ext_from_int(ext), img);\r
+                                               ts->printf(ts->LOG, "reading test image : %s\n", string(string(ts->get_data_path()) + "readwrite/test" + ext_from_int(ext)).c_str());\r
+                                               \r
+                                               Mat img_test = imread(string(ts->get_data_path()) + "readwrite/test" + ext_from_int(ext), CV_LOAD_IMAGE_UNCHANGED);\r
+                                               \r
+                                               if (img_test.empty()) ts->set_failed_test_info(ts->FAIL_MISMATCH);\r
+\r
+                                               CV_Assert(img.size() == img_test.size());\r
+                                               CV_Assert(img.type() == img_test.type());\r
+\r
+                                               double n = norm(img, img_test);\r
+                                               if ( n > 1.0)\r
+                                               {\r
+                                                       ts->printf(ts->LOG, "norm = %f \n", n);\r
+                                                       ts->set_failed_test_info(ts->FAIL_MISMATCH);\r
+                                               }\r
+                                       }\r
+\r
+                                       for (size_t num_channels = 1; num_channels <= 3; num_channels+=2)\r
+                                       {\r
+                                               // jpeg\r
+                                               ts->printf(ts->LOG, "image type depth:%d   channels:%d   ext: %s\n", CV_8U, num_channels, ".jpg");\r
+                                               Mat img(img_r * k, img_c * k, CV_MAKETYPE(CV_8U, num_channels), Scalar::all(0));\r
+                                               circle(img, Point2i((img_c * k) / 2, (img_r * k) / 2), cv::min((img_r * k), (img_c * k)) / 4 , Scalar::all(255));\r
+                                               string filename = string(ts->get_data_path() + "readwrite/test_" + char(k + 48) + "_c" + char(num_channels + 48) + "_.jpg");\r
+                                               imwrite(filename, img);\r
+                                               img = imread(filename, CV_LOAD_IMAGE_UNCHANGED);\r
+\r
+                                               filename = string(ts->get_data_path() + "readwrite/test_" + char(k + 48) + "_c" + char(num_channels + 48) + ".jpg");\r
+                                               ts->printf(ts->LOG, "reading test image : %s\n", filename.c_str());\r
+                                               Mat img_test = imread(filename, CV_LOAD_IMAGE_UNCHANGED);\r
+                                               \r
+                                               if (img_test.empty()) ts->set_failed_test_info(ts->FAIL_MISMATCH);\r
+\r
+                                               CV_Assert(img.size() == img_test.size());\r
+                                               CV_Assert(img.type() == img_test.type());\r
+\r
+                                               double n = norm(img, img_test);\r
+                                               if ( n > 1.0)\r
+                                               {\r
+                                                       ts->printf(ts->LOG, "norm = %f \n", n);\r
+                                                       ts->set_failed_test_info(ts->FAIL_MISMATCH);\r
+                                               }\r
+                                       }\r
+\r
+                                       for (size_t num_channels = 1; num_channels <= 3; num_channels+=2)\r
+                                       {\r
+                                               // tiff\r
+                                               ts->printf(ts->LOG, "image type depth:%d   channels:%d   ext: %s\n", CV_16U, num_channels, ".tiff");\r
+                                               Mat img(img_r * k, img_c * k, CV_MAKETYPE(CV_16U, num_channels), Scalar::all(0));\r
+                                               circle(img, Point2i((img_c * k) / 2, (img_r * k) / 2), cv::min((img_r * k), (img_c * k)) / 4 , Scalar::all(255));\r
+                                               string filename = string(ts->get_data_path() + "readwrite/test.tiff");\r
+                                               imwrite(filename, img);\r
+                                               ts->printf(ts->LOG, "reading test image : %s\n", filename.c_str());\r
+                                               Mat img_test = imread(filename, CV_LOAD_IMAGE_UNCHANGED);\r
+                                               \r
+                                               if (img_test.empty()) ts->set_failed_test_info(ts->FAIL_MISMATCH);\r
+\r
+                                               CV_Assert(img.size() == img_test.size());\r
+\r
+                                               ts->printf(ts->LOG, "img      : %d ; %d \n", img.channels(), img.depth());\r
+                                               ts->printf(ts->LOG, "img_test : %d ; %d \n", img_test.channels(), img_test.depth());\r
+\r
+                                               CV_Assert(img.type() == img_test.type());\r
+\r
+\r
+                                               double n = norm(img, img_test);\r
+                                               if ( n > 1.0)\r
+                                               {\r
+                                                       ts->printf(ts->LOG, "norm = %f \n", n);\r
+                                                       ts->set_failed_test_info(ts->FAIL_MISMATCH);\r
+                                               }\r
+                                       }\r
+                               }\r
+                       }\r
+                       catch(const cv::Exception & e)\r
+                       {\r
+                               ts->printf(ts->LOG, "Exception: %s\n" , e.what());\r
+                               ts->set_failed_test_info(ts->FAIL_MISMATCH);\r
+                       }\r
+               }\r
+};\r
+\r
+TEST(Highgui_FFmpeg_WriteBigImage,         regression) { CV_FFmpegWriteBigImageTest      test; test.safe_run(); }\r
+TEST(Highgui_FFmpeg_WriteBigVideo,         regression) { CV_FFmpegWriteBigVideoTest      test; test.safe_run(); }\r
+TEST(Highgui_FFmpeg_WriteSequenceImage,    regression) { CV_FFmpegWriteSequenceImageTest test; test.safe_run(); }
\ No newline at end of file
index 6ee0a40..f56c6f4 100644 (file)
@@ -69,10 +69,10 @@ double PSNR(const Mat& m1, const Mat& m2)
 
 void CV_HighGuiTest::ImagesTest(const string& dir)
 {
-       string _name = dir + string("shared/baboon.jpg");
+       string _name = dir + string("../cv/shared/baboon.jpg");
        ts->printf(ts->LOG, "reading image : %s\n", _name.c_str());
 
-       Mat image = imread(dir + "shared/baboon.jpg");
+       Mat image = imread(_name);
        image.convertTo(image, CV_8UC3);
        
        if (image.empty())
@@ -155,7 +155,7 @@ void CV_HighGuiTest::ImagesTest(const string& dir)
 
 void CV_HighGuiTest::VideoTest(const string& dir, int fourcc)
 {      
-       string src_file = dir + "shared/video_for_test.avi";            
+       string src_file = dir + "../cv/shared/video_for_test.avi";              
        string tmp_name = dir + "video.avi";
 
        ts->printf(ts->LOG, "reading video : %s\n", src_file.c_str());
@@ -183,7 +183,7 @@ void CV_HighGuiTest::VideoTest(const string& dir, int fourcc)
                        writer = cvCreateVideoWriter(tmp_name.c_str(), fourcc, 24, cvGetSize(img));                                     
                        if (writer == 0)
                        {
-                               ts->printf(ts->LOG, "can't create writer\n");
+                               ts->printf(ts->LOG, "can't create writer (with fourcc : %d)\n", fourcc);
                                cvReleaseCapture( &cap );
                                ts->set_failed_test_info(ts->FAIL_MISMATCH);
                                return;