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
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