]> rtime.felk.cvut.cz Git - opencv.git/commitdiff
add surf & start detectors correctness test
authoranatoly <anatoly@73c94f0f-984f-4a5f-82bc-2d8db8d8ee08>
Mon, 14 Dec 2009 08:00:44 +0000 (08:00 +0000)
committeranatoly <anatoly@73c94f0f-984f-4a5f-82bc-2d8db8d8ee08>
Mon, 14 Dec 2009 08:00:44 +0000 (08:00 +0000)
git-svn-id: https://code.ros.org/svn/opencv/trunk@2426 73c94f0f-984f-4a5f-82bc-2d8db8d8ee08

opencv/tests/cv/src/detectors_test.cpp
opencv_extra/testdata/cv/detectors/star.xml [new file with mode: 0644]
opencv_extra/testdata/cv/detectors/surf.xml [new file with mode: 0644]
opencv_extra/testdata/cv/shared/graffiti.png [new file with mode: 0644]

index 9f9876cbc15ab72574b988959b5a9885a6a9352a..a9eaf342fd152cdbe67d444de251cf178d4328a0 100644 (file)
@@ -44,6 +44,8 @@
 #include <string>\r
 #include <iostream>\r
 #include <fstream>\r
+#include <numeric>\r
+#include <algorithm>\r
 #include <iterator>\r
 #include "cvaux.h"\r
 \r
@@ -56,7 +58,10 @@ public:
     CV_DetectorsTest();\r
     ~CV_DetectorsTest();    \r
 protected:    \r
-    void run(int);    \r
+    void run(int);  \r
+    template <class T> bool testDedector(const Mat& img, const T& detector, vector<KeyPoint>& expected);\r
+\r
+    void LoadExpected(const string& file, vector<KeyPoint>& out);\r
 };\r
 \r
 CV_DetectorsTest::CV_DetectorsTest(): CvTest( "feature-detectors", "?" )\r
@@ -65,13 +70,71 @@ CV_DetectorsTest::CV_DetectorsTest(): CvTest( "feature-detectors", "?" )
 }\r
 CV_DetectorsTest::~CV_DetectorsTest() {}\r
 \r
-struct OutOfMask\r
+void getRotation(const Mat& img, Mat& aff, Mat& out)\r
 {\r
-    const Mat& msk;\r
-    OutOfMask(const Mat& mask) : msk(mask) {};\r
-    OutOfMask& operator=(const OutOfMask&);\r
-    bool operator()(const KeyPoint& kp) const { return msk.at<uchar>(kp.pt) == 0; }\r
-};\r
+    Point center(img.cols/2, img.rows/2);\r
+    aff = getRotationMatrix2D(center, 30, 1);\r
+    warpAffine( img, out, aff, img.size());\r
+}\r
+\r
+void getZoom(const Mat& img, Mat& aff, Mat& out)\r
+{\r
+    const double mult = 1.2;\r
+\r
+    aff.create(2, 3, CV_64F);\r
+    double *data = aff.ptr<double>();\r
+    data[0] = mult; data[1] =    0; data[2] = 0;\r
+    data[3] =    0; data[4] = mult; data[5] = 0;\r
+    \r
+    warpAffine( img, out, aff, img.size());\r
+}\r
+\r
+void getBlur(const Mat& img, Mat& aff, Mat& out)\r
+{        \r
+    aff.create(2, 3, CV_64F);\r
+    double *data = aff.ptr<double>();\r
+    data[0] = 1; data[1] = 0; data[2] = 0;\r
+    data[3] = 0; data[4] = 1; data[5] = 0;\r
+        \r
+    GaussianBlur(img, out, Size(5, 5), 2);    \r
+}\r
+\r
+void getBrightness(const Mat& img, Mat& aff, Mat& out)\r
+{        \r
+    aff.create(2, 3, CV_64F);\r
+    double *data = aff.ptr<double>();\r
+    data[0] = 1; data[1] = 0; data[2] = 0;\r
+    data[3] = 0; data[4] = 1; data[5] = 0;\r
+        \r
+    add(img, Mat(img.size(), img.type(), Scalar(15)), out);    \r
+}\r
+\r
+void showOrig(const Mat& img, const vector<KeyPoint>& orig_pts)\r
+{\r
+      \r
+    Mat img_color;\r
+    cvtColor(img, img_color, CV_GRAY2BGR); \r
+    \r
+    for(size_t i = 0; i < orig_pts.size(); ++i)    \r
+        circle(img_color, orig_pts[i].pt, (int)orig_pts[i].size/2, CV_RGB(0, 255, 0));                        \r
+    \r
+    namedWindow("O"); imshow("O", img_color);     \r
+}\r
+\r
+void show(const string& name, const Mat& new_img, const vector<KeyPoint>& new_pts, const vector<KeyPoint>& transf_pts)\r
+{\r
+      \r
+    Mat new_img_color;    \r
+    cvtColor(new_img, new_img_color, CV_GRAY2BGR); \r
+\r
+    for(size_t i = 0; i < transf_pts.size(); ++i)\r
+        circle(new_img_color, transf_pts[i].pt, (int)transf_pts[i].size/2, CV_RGB(255, 0, 0));\r
+\r
+    for(size_t i = 0; i < new_pts.size(); ++i)    \r
+        circle(new_img_color, new_pts[i].pt, (int)new_pts[i].size/2, CV_RGB(0, 0, 255));\r
+    \r
+    namedWindow(name + "_T"); imshow(name + "_T", new_img_color); \r
+}\r
 \r
 struct WrapPoint\r
 {\r
@@ -87,78 +150,158 @@ struct WrapPoint
     }\r
 };\r
 \r
-void CV_DetectorsTest::run( int /*start_from*/ )\r
-{             \r
-    Mat oimg = imread(string(ts->get_data_path()) + "shared/baboon.jpg", 0);\r
-    //Mat oimg = imread(string(ts->get_data_path()) + "shared/fruits.jpg", 0);\r
+struct sortByR { bool operator()(const KeyPoint& kp1, const KeyPoint& kp2) { return norm(kp1.pt) < norm(kp2.pt); } };\r
+\r
+template <class T> bool CV_DetectorsTest::testDedector(const Mat& img, const T& detector, vector<KeyPoint>& exp)\r
+{\r
+    vector<KeyPoint> orig_kpts;\r
+    detector(img, orig_kpts);\r
+\r
+    typedef void (*TransfFunc )(const Mat&, Mat&, Mat& FransfFunc);    \r
+    const TransfFunc transfFunc[] = { getRotation, getZoom, getBlur, getBrightness };\r
+    //const string names[] =  { "Rotation", "Zoom", "Blur", "Brightness" };\r
+    const size_t case_num = sizeof(transfFunc)/sizeof(transfFunc[0]);\r
 \r
-    if (oimg.empty())\r
+    vector<Mat> affs(case_num);\r
+    vector<Mat> new_imgs(case_num);\r
+\r
+    vector< vector<KeyPoint> > new_kpts(case_num);\r
+    vector< vector<KeyPoint> > transf_kpts(case_num);\r
+\r
+    //showOrig(img, orig_kpts);\r
+    for(size_t i = 0; i < case_num; ++i)   \r
     {\r
-        ts->set_failed_test_info( CvTS::FAIL_INVALID_TEST_DATA );\r
-        return;\r
-    }    \r
+        transfFunc[i](img, affs[i], new_imgs[i]);\r
+        detector(new_imgs[i], new_kpts[i]);\r
+        transform(orig_kpts.begin(), orig_kpts.end(), back_inserter(transf_kpts[i]), WrapPoint(affs[i]));\r
+        //show(names[i], new_imgs[i], new_kpts[i], transf_kpts[i]);\r
+    }\r
 \r
-    Point center(oimg.cols/2, oimg.rows/2);\r
-              \r
-    Mat aff = getRotationMatrix2D(center, 45, 1);\r
+    const float thres = 3;\r
+    const float nthres = 3;\r
 \r
-    Mat rimg;  \r
-    warpAffine( oimg, rimg, aff, oimg.size());\r
+    vector<KeyPoint> result;\r
+    for(size_t i = 0; i < orig_kpts.size(); ++i)\r
+    {\r
+        const KeyPoint& okp = orig_kpts[i];\r
+        int foundCounter = 0;\r
+        for(size_t j = 0; j < case_num; ++j)\r
+        {            \r
+            const KeyPoint& tkp = transf_kpts[j][i];\r
 \r
-    Mat mask(oimg.size(), CV_8U, Scalar(0));    \r
-    circle(mask, center, std::min(center.x, center.y) - 10, Scalar(255), CV_FILLED);\r
-    Mat inv_mask;\r
-    mask.convertTo(inv_mask, CV_8U, -1, 255);\r
+            size_t k = 0;\r
+            \r
+            for(; k < new_kpts[j].size(); ++k)\r
+                if (norm(new_kpts[j][k].pt - tkp.pt) < nthres && fabs(new_kpts[j][k].size - tkp.size) < thres)\r
+                    break;\r
 \r
-    Mat oimg_color, rimg_color;\r
-    cvtColor(oimg, oimg_color, CV_GRAY2BGR);   oimg_color.setTo(Scalar(0), inv_mask);\r
-    cvtColor(rimg, rimg_color, CV_GRAY2BGR);   rimg_color.setTo(Scalar(0), inv_mask);   \r
+            if (k != new_kpts[j].size())\r
+                ++foundCounter;\r
 \r
-    SURF surf(1536, 2);\r
-    StarDetector star(45, 30, 10, 8, 5);\r
+        }\r
+        if (foundCounter == case_num)\r
+            result.push_back(okp);\r
+    }\r
 \r
-    vector<KeyPoint> opoints_surf, rpoints_surf, opoints_star, rpoints_star;\r
-    surf(oimg, mask, opoints_surf);\r
-    surf(rimg, mask, rpoints_surf);\r
+    sort(result.begin(), result.end(), sortByR());\r
+    sort(exp.begin(), exp.end(), sortByR());    \r
 \r
-    star(oimg, opoints_star);\r
-    star(rimg, rpoints_star);\r
-    \r
-    opoints_star.erase(\r
-        remove_if(opoints_star.begin(), opoints_star.end(), OutOfMask(mask)),   \r
-        opoints_star.end());\r
+    int foundCounter1 = 0;\r
+    for(size_t i = 0; i < exp.size(); ++i)\r
+    {\r
+        const KeyPoint& e = exp[i];                \r
+        size_t j = 0;\r
+        for(; j < result.size(); ++j)\r
+        {\r
+            const KeyPoint& r = result[i];\r
+            if (norm(r.pt-e.pt) < nthres && fabs(r.size - e.size) < thres)\r
+                break;\r
+        }\r
+        if (j != result.size())\r
+            ++foundCounter1;\r
+    }\r
 \r
-    rpoints_star.erase(\r
-        remove_if(rpoints_star.begin(), rpoints_star.end(), OutOfMask(mask)), \r
-        rpoints_star.end());\r
+    int foundCounter2 = 0;\r
+    for(size_t i = 0; i < result.size(); ++i)\r
+    {\r
+        const KeyPoint& r = result[i];                \r
+        size_t j = 0;\r
+        for(; j < exp.size(); ++j)\r
+        {\r
+            const KeyPoint& e = exp[i];\r
+            if (norm(r.pt-e.pt) < nthres && fabs(r.size - e.size) < thres)\r
+                break;\r
+        }\r
+        if (j != exp.size())\r
+            ++foundCounter2;\r
+    }\r
+    //showOrig(img, result); waitKey();\r
 \r
-    vector<KeyPoint> exp_rpoints_surf(opoints_surf.size()), exp_rpoints_star(opoints_star.size());\r
-    transform(opoints_surf.begin(), opoints_surf.end(), exp_rpoints_surf.begin(), WrapPoint(aff));\r
-    transform(opoints_star.begin(), opoints_star.end(), exp_rpoints_star.begin(), WrapPoint(aff));\r
-    \r
-    for(size_t i = 0; i < opoints_surf.size(); ++i)\r
+    const float errorRate = 0.9f;\r
+    if (float(foundCounter1)/exp.size() < errorRate || float(foundCounter2)/result.size() < errorRate)\r
     {\r
-        circle(oimg_color, opoints_surf[i].pt, (int)opoints_surf[i].size/2, CV_RGB(0, 255, 0));\r
-        circle(rimg_color, exp_rpoints_surf[i].pt, (int)exp_rpoints_surf[i].size/2, CV_RGB(255, 0, 0));\r
+        ts->set_failed_test_info( CvTS::FAIL_MISMATCH);\r
+        return false;\r
     }\r
+    return true;        \r
+}\r
 \r
-    for(size_t i = 0; i < rpoints_surf.size(); ++i)\r
-        circle(rimg_color, rpoints_surf[i].pt, (int)rpoints_surf[i].size/2, CV_RGB(0, 255, 0));\r
+struct SurfNoMaskWrap \r
+{\r
+    const SURF& detector;\r
+    SurfNoMaskWrap(const SURF& surf) : detector(surf) {}\r
+    SurfNoMaskWrap& operator=(const SurfNoMaskWrap&);\r
+    void operator()(const Mat& img, vector<KeyPoint>& kpts) const { detector(img, Mat(), kpts); }\r
+};\r
 \r
-    for(size_t i = 0; i < opoints_star.size(); ++i)\r
+void CV_DetectorsTest::LoadExpected(const string& file, vector<KeyPoint>& out)\r
+{     \r
+    Mat mat_exp;\r
+    FileStorage fs(file, FileStorage::READ);    \r
+    if (fs.isOpened())\r
     {\r
-        circle(oimg_color, opoints_star[i].pt, (int)opoints_star[i].size/2, CV_RGB(0, 0, 255));\r
-        circle(rimg_color, exp_rpoints_surf[i].pt, (int)exp_rpoints_surf[i].size/2, CV_RGB(255, 0, 0));\r
+        read( fs["ResultVectorData"], mat_exp, Mat() );           \r
+        out.resize(mat_exp.cols / sizeof(KeyPoint));\r
+        copy(mat_exp.ptr<KeyPoint>(), mat_exp.ptr<KeyPoint>() + out.size(), out.begin());            \r
     }\r
+    else\r
+    {\r
+        ts->set_failed_test_info( CvTS::FAIL_INVALID_TEST_DATA);\r
+        out.clear();\r
+    }    \r
+}\r
+\r
+void CV_DetectorsTest::run( int /*start_from*/ )\r
+{               \r
+    Mat img = imread(string(ts->get_data_path()) + "shared/graffiti.png", 0);\r
+\r
+    if (img.empty())\r
+    {\r
+        ts->set_failed_test_info( CvTS::FAIL_INVALID_TEST_DATA );\r
+        return;\r
+    }\r
+            \r
+    Mat to_test(img.size() * 2, img.type(), Scalar(0));\r
+    Mat roi = to_test(Rect(img.rows/2, img.cols/2, img.cols, img.rows));\r
+    img.copyTo(roi);\r
+    GaussianBlur(to_test, to_test, Size(3, 3), 1.5);\r
+        \r
+    vector<KeyPoint> exp;\r
+    LoadExpected(string(ts->get_data_path()) + "detectors/surf.xml", exp);        \r
+    if (exp.empty())\r
+        return;\r
 \r
-    for(size_t i = 0; i < rpoints_star.size(); ++i)\r
-        circle(rimg_color, rpoints_star[i].pt, (int)rpoints_star[i].size/2, CV_RGB(0, 0, 255));\r
+    if (!testDedector(to_test, SurfNoMaskWrap(SURF(1536+512+512, 2)), exp))\r
+        return;\r
     \r
-  /*  namedWindow("R"); imshow("R", rimg_color); \r
-    namedWindow("O"); imshow("O", oimg_color); \r
-    waitKey();*/\r
+    LoadExpected(string(ts->get_data_path()) + "detectors/star.xml", exp);\r
+    if (exp.empty())\r
+        return;\r
+\r
+    if (!testDedector(to_test, StarDetector(45, 30, 10, 8, 5), exp))\r
+        return;\r
 \r
-    ts->set_failed_test_info( CvTS::FAIL_GENERIC );            \r
+    ts->set_failed_test_info( CvTS::OK);                  \r
 }\r
 \r
 \r
diff --git a/opencv_extra/testdata/cv/detectors/star.xml b/opencv_extra/testdata/cv/detectors/star.xml
new file mode 100644 (file)
index 0000000..e82b73f
--- /dev/null
@@ -0,0 +1,213 @@
+<?xml version="1.0"?>\r
+<opencv_storage>\r
+<ResultVectorData type_id="opencv-matrix">\r
+  <rows>1</rows>\r
+  <cols>4648</cols>\r
+  <dt>u</dt>\r
+  <data>\r
+    0 0 50 67 0 0 105 67 0 0 128 65 0 0 128 191 186 157 103 194 0 0 0 0\r
+    255 255 255 255 0 0 98 67 0 0 75 67 0 0 192 64 0 0 128 191 175 105\r
+    128 66 0 0 0 0 255 255 255 255 0 0 60 67 0 0 116 67 0 0 192 64 0 0\r
+    128 191 141 85 141 66 0 0 0 0 255 255 255 255 0 0 69 67 0 0 110 67 0\r
+    0 0 65 0 0 128 191 110 51 146 194 0 0 0 0 255 255 255 255 0 0 55 67\r
+    0 128 133 67 0 0 0 65 0 0 128 191 136 24 80 194 0 0 0 0 255 255 255\r
+    255 0 0 77 67 0 128 129 67 0 0 128 64 0 0 128 191 232 48 141 194 0 0\r
+    0 0 255 255 255 255 0 0 120 67 0 0 109 67 0 0 192 64 0 0 128 191 156\r
+    181 28 194 0 0 0 0 255 255 255 255 0 0 93 67 0 0 144 67 0 0 192 64 0\r
+    0 128 191 204 225 74 194 0 0 0 0 255 255 255 255 0 0 135 67 0 0 118\r
+    67 0 0 0 65 0 0 128 191 118 19 63 66 0 0 0 0 255 255 255 255 0 128\r
+    157 67 0 0 110 67 0 0 192 64 0 0 128 191 124 140 75 66 0 0 0 0 255\r
+    255 255 255 0 0 65 67 0 128 173 67 0 0 128 65 0 0 128 191 96 170 28\r
+    194 0 0 0 0 255 255 255 255 0 0 90 67 0 128 168 67 0 0 192 64 0 0\r
+    128 191 156 181 32 194 0 0 0 0 255 255 255 255 0 0 81 67 0 0 173 67\r
+    0 0 64 65 0 0 128 191 103 143 155 66 0 0 0 0 255 255 255 255 0 0 173\r
+    67 0 0 100 67 0 0 64 65 0 0 128 191 28 105 68 66 0 0 0 0 255 255 255\r
+    255 0 0 135 67 0 0 159 67 0 0 64 65 0 0 128 191 80 23 43 66 0 0 0 0\r
+    255 255 255 255 0 128 148 67 0 0 148 67 0 0 192 64 0 0 128 191 230\r
+    70 30 66 0 0 0 0 255 255 255 255 0 0 134 67 0 128 161 67 0 0 0 65 0\r
+    0 128 191 2 185 46 66 0 0 0 0 255 255 255 255 0 0 128 67 0 128 167\r
+    67 0 0 128 64 0 0 128 191 140 167 138 66 0 0 0 0 255 255 255 255 0 0\r
+    169 67 0 128 130 67 0 0 128 65 0 0 128 191 20 170 15 194 0 0 0 0 255\r
+    255 255 255 0 0 146 67 0 0 156 67 0 0 128 64 0 0 128 191 34 20 88 66\r
+    0 0 0 0 255 255 255 255 0 128 136 67 0 128 164 67 0 0 192 64 0 0 128\r
+    191 152 139 56 194 0 0 0 0 255 255 255 255 0 0 137 67 0 0 166 67 0 0\r
+    192 64 0 0 128 191 96 11 56 194 0 0 0 0 255 255 255 255 0 0 127 67 0\r
+    128 173 67 0 0 128 65 0 0 128 191 13 19 132 194 0 0 0 0 255 255 255\r
+    255 0 128 145 67 0 128 159 67 0 0 0 65 0 0 128 191 124 70 33 194 0 0\r
+    0 0 255 255 255 255 0 0 46 67 0 0 198 67 0 0 192 64 0 0 128 191 13\r
+    210 50 194 0 0 0 0 255 255 255 255 0 0 140 67 0 0 166 67 0 0 128 64\r
+    0 0 128 191 174 74 129 66 0 0 0 0 255 255 255 255 0 0 143 67 0 128\r
+    164 67 0 0 192 64 0 0 128 191 140 192 65 194 0 0 0 0 255 255 255 255\r
+    0 0 194 67 0 0 76 67 0 0 0 65 0 0 128 191 93 208 145 66 0 0 0 0 255\r
+    255 255 255 0 128 159 67 0 128 150 67 0 0 192 64 0 0 128 191 192 1\r
+    39 194 0 0 0 0 255 255 255 255 0 0 114 67 0 128 183 67 0 0 176 65 0\r
+    0 128 191 2 14 121 66 0 0 0 0 255 255 255 255 0 0 185 67 0 0 111 67\r
+    0 0 64 65 0 0 128 191 192 255 73 66 0 0 0 0 255 255 255 255 0 0 96\r
+    67 0 0 190 67 0 0 128 65 0 0 128 191 72 89 145 194 0 0 0 0 255 255\r
+    255 255 0 128 137 67 0 128 172 67 0 0 192 64 0 0 128 191 8 126 97\r
+    194 0 0 0 0 255 255 255 255 0 0 198 67 0 0 67 67 0 0 64 65 0 0 128\r
+    191 35 146 30 194 0 0 0 0 255 255 255 255 0 128 148 67 0 0 165 67 0\r
+    0 64 65 0 0 128 191 68 251 26 66 0 0 0 0 255 255 255 255 0 0 130 67\r
+    0 0 180 67 0 0 192 64 0 0 128 191 210 4 66 66 0 0 0 0 255 255 255\r
+    255 0 128 181 67 0 0 128 67 0 0 192 64 0 0 128 191 84 29 72 66 0 0 0\r
+    0 255 255 255 255 0 0 36 67 0 128 206 67 0 0 192 64 0 0 128 191 89 6\r
+    171 66 0 0 0 0 255 255 255 255 0 0 53 67 0 0 204 67 0 0 192 64 0 0\r
+    128 191 201 162 48 194 0 0 0 0 255 255 255 255 0 128 197 67 0 0 84\r
+    67 0 0 192 64 0 0 128 191 154 25 133 194 0 0 0 0 255 255 255 255 0\r
+    128 153 67 0 128 163 67 0 0 192 64 0 0 128 191 4 70 141 194 0 0 0 0\r
+    255 255 255 255 0 128 186 67 0 0 125 67 0 0 64 65 0 0 128 191 142\r
+    187 101 194 0 0 0 0 255 255 255 255 0 0 190 67 0 0 115 67 0 0 192 64\r
+    0 0 128 191 148 197 129 194 0 0 0 0 255 255 255 255 0 0 191 67 0 0\r
+    121 67 0 0 128 64 0 0 128 191 110 31 126 66 0 0 0 0 255 255 255 255\r
+    0 0 99 67 0 0 198 67 0 0 128 64 0 0 128 191 86 220 88 66 0 0 0 0 255\r
+    255 255 255 0 0 42 67 0 0 212 67 0 0 192 64 0 0 128 191 114 21 159\r
+    66 0 0 0 0 255 255 255 255 0 128 142 67 0 0 179 67 0 0 176 65 0 0\r
+    128 191 104 96 135 66 0 0 0 0 255 255 255 255 0 0 162 67 0 0 162 67\r
+    0 0 192 64 0 0 128 191 4 77 58 66 0 0 0 0 255 255 255 255 0 0 98 67\r
+    0 128 200 67 0 0 128 64 0 0 128 191 82 59 107 194 0 0 0 0 255 255\r
+    255 255 0 0 38 67 0 128 215 67 0 0 128 64 0 0 128 191 166 249 79 194\r
+    0 0 0 0 255 255 255 255 0 0 107 67 0 0 199 67 0 0 128 64 0 0 128 191\r
+    250 225 92 194 0 0 0 0 255 255 255 255 0 128 205 67 0 0 86 67 0 0\r
+    192 64 0 0 128 191 60 205 78 194 0 0 0 0 255 255 255 255 0 0 159 67\r
+    0 128 169 67 0 0 192 64 0 0 128 191 226 63 38 194 0 0 0 0 255 255\r
+    255 255 0 128 151 67 0 128 176 67 0 0 128 64 0 0 128 191 189 197 129\r
+    66 0 0 0 0 255 255 255 255 0 0 164 67 0 0 165 67 0 0 192 64 0 0 128\r
+    191 146 48 59 194 0 0 0 0 255 255 255 255 0 128 204 67 0 0 94 67 0 0\r
+    192 64 0 0 128 191 12 161 102 66 0 0 0 0 255 255 255 255 0 0 35 67 0\r
+    128 218 67 0 0 192 64 0 0 128 191 146 27 143 66 0 0 0 0 255 255 255\r
+    255 0 128 151 67 0 128 178 67 0 0 128 64 0 0 128 191 210 112 129 194\r
+    0 0 0 0 255 255 255 255 0 0 155 67 0 0 177 67 0 0 128 64 0 0 128 191\r
+    154 153 72 194 0 0 0 0 255 255 255 255 0 0 30 67 0 0 222 67 0 0 0 65\r
+    0 0 128 191 74 214 27 194 0 0 0 0 255 255 255 255 0 0 201 67 0 0 119\r
+    67 0 0 176 65 0 0 128 191 106 72 34 66 0 0 0 0 255 255 255 255 0 0\r
+    80 67 0 0 212 67 0 0 128 64 0 0 128 191 84 65 37 194 0 0 0 0 255 255\r
+    255 255 0 0 106 67 0 128 205 67 0 0 0 65 0 0 128 191 47 160 137 194\r
+    0 0 0 0 255 255 255 255 0 0 53 67 0 128 219 67 0 0 0 65 0 0 128 191\r
+    61 60 123 66 0 0 0 0 255 255 255 255 0 128 180 67 0 128 155 67 0 0\r
+    128 65 0 0 128 191 38 39 20 194 0 0 0 0 255 255 255 255 0 0 35 67 0\r
+    128 225 67 0 0 192 64 0 0 128 191 74 159 200 66 0 0 0 0 255 255 255\r
+    255 0 0 92 67 0 128 213 67 0 0 0 65 0 0 128 191 184 41 131 194 0 0 0\r
+    0 255 255 255 255 0 0 85 67 0 128 215 67 0 0 192 64 0 0 128 191 64\r
+    247 94 66 0 0 0 0 255 255 255 255 0 0 113 67 0 0 208 67 0 0 192 64 0\r
+    0 128 191 190 194 112 66 0 0 0 0 255 255 255 255 0 0 218 67 0 0 75\r
+    67 0 0 192 64 0 0 128 191 67 26 87 66 0 0 0 0 255 255 255 255 0 0 44\r
+    67 0 0 226 67 0 0 192 64 0 0 128 191 213 102 99 194 0 0 0 0 255 255\r
+    255 255 0 0 187 67 0 128 153 67 0 0 128 64 0 0 128 191 122 151 88 66\r
+    0 0 0 0 255 255 255 255 0 0 107 67 0 128 211 67 0 0 128 65 0 0 128\r
+    191 45 156 157 66 0 0 0 0 255 255 255 255 0 0 57 67 0 0 224 67 0 0 0\r
+    65 0 0 128 191 245 115 112 194 0 0 0 0 255 255 255 255 0 128 206 67\r
+    0 0 126 67 0 0 0 65 0 0 128 191 212 29 35 66 0 0 0 0 255 255 255 255\r
+    0 128 159 67 0 128 184 67 0 0 176 65 0 0 128 191 232 152 112 66 0 0\r
+    0 0 255 255 255 255 0 0 46 67 0 0 229 67 0 0 192 64 0 0 128 191 4\r
+    177 137 66 0 0 0 0 255 255 255 255 0 0 174 67 0 128 172 67 0 0 64 65\r
+    0 0 128 191 94 169 45 194 0 0 0 0 255 255 255 255 0 0 220 67 0 0 88\r
+    67 0 0 0 65 0 0 128 191 10 184 19 66 0 0 0 0 255 255 255 255 0 0 119\r
+    67 0 0 212 67 0 0 128 64 0 0 128 191 20 168 97 66 0 0 0 0 255 255\r
+    255 255 0 0 61 67 0 0 228 67 0 0 0 65 0 0 128 191 68 14 81 66 0 0 0\r
+    0 255 255 255 255 0 0 97 67 0 0 220 67 0 0 0 65 0 0 128 191 232 120\r
+    127 66 0 0 0 0 255 255 255 255 0 0 209 67 0 0 132 67 0 0 128 64 0 0\r
+    128 191 216 175 73 66 0 0 0 0 255 255 255 255 0 128 226 67 0 0 75 67\r
+    0 0 192 64 0 0 128 191 6 205 143 66 0 0 0 0 255 255 255 255 0 0 219\r
+    67 0 0 109 67 0 0 192 64 0 0 128 191 232 119 29 66 0 0 0 0 255 255\r
+    255 255 0 0 203 67 0 0 145 67 0 0 64 65 0 0 128 191 102 87 56 66 0 0\r
+    0 0 255 255 255 255 0 0 218 67 0 0 116 67 0 0 192 64 0 0 128 191 59\r
+    184 47 194 0 0 0 0 255 255 255 255 0 0 58 67 0 128 232 67 0 0 192 64\r
+    0 0 128 191 220 207 55 194 0 0 0 0 255 255 255 255 0 128 187 67 0\r
+    128 166 67 0 0 128 64 0 0 128 191 1 140 128 66 0 0 0 0 255 255 255\r
+    255 0 0 176 67 0 0 179 67 0 0 0 65 0 0 128 191 14 210 126 66 0 0 0 0\r
+    255 255 255 255 0 0 123 67 0 128 217 67 0 0 128 65 0 0 128 191 98\r
+    144 128 194 0 0 0 0 255 255 255 255 0 0 161 67 0 0 193 67 0 0 192 64\r
+    0 0 128 191 124 189 79 194 0 0 0 0 255 255 255 255 0 128 225 67 0 0\r
+    100 67 0 0 192 64 0 0 128 191 96 253 70 194 0 0 0 0 255 255 255 255\r
+    0 128 221 67 0 0 117 67 0 0 64 65 0 0 128 191 115 248 70 194 0 0 0 0\r
+    255 255 255 255 0 128 194 67 0 128 162 67 0 0 0 65 0 0 128 191 42\r
+    144 100 66 0 0 0 0 255 255 255 255 0 0 61 67 0 128 236 67 0 0 176 65\r
+    0 0 128 191 193 40 43 194 0 0 0 0 255 255 255 255 0 0 228 67 0 0 105\r
+    67 0 0 192 64 0 0 128 191 114 14 106 66 0 0 0 0 255 255 255 255 0 0\r
+    186 67 0 0 178 67 0 0 192 64 0 0 128 191 2 28 30 66 0 0 0 0 255 255\r
+    255 255 0 0 201 67 0 0 163 67 0 0 128 64 0 0 128 191 144 93 117 66 0\r
+    0 0 0 255 255 255 255 0 0 182 67 0 0 184 67 0 0 192 64 0 0 128 191\r
+    24 143 106 66 0 0 0 0 255 255 255 255 0 0 197 67 0 128 168 67 0 0\r
+    128 64 0 0 128 191 102 102 143 66 0 0 0 0 255 255 255 255 0 128 149\r
+    67 0 0 212 67 0 0 192 64 0 0 128 191 178 40 69 194 0 0 0 0 255 255\r
+    255 255 0 0 87 67 0 128 237 67 0 0 192 64 0 0 128 191 0 21 100 194 0\r
+    0 0 0 255 255 255 255 0 128 203 67 0 0 164 67 0 0 128 64 0 0 128 191\r
+    92 143 43 194 0 0 0 0 255 255 255 255 0 128 191 67 0 128 178 67 0 0\r
+    176 65 0 0 128 191 114 231 1 66 0 0 0 0 255 255 255 255 0 0 159 67 0\r
+    128 208 67 0 0 128 64 0 0 128 191 186 149 63 194 0 0 0 0 255 255 255\r
+    255 0 128 155 67 0 0 212 67 0 0 128 64 0 0 128 191 45 134 78 194 0 0\r
+    0 0 255 255 255 255 0 128 172 67 0 0 199 67 0 0 192 64 0 0 128 191\r
+    228 35 130 66 0 0 0 0 255 255 255 255 0 128 200 67 0 0 171 67 0 0 0\r
+    65 0 0 128 191 241 243 74 194 0 0 0 0 255 255 255 255 0 0 171 67 0\r
+    128 201 67 0 0 128 64 0 0 128 191 152 117 55 194 0 0 0 0 255 255 255\r
+    255 0 128 178 67 0 0 196 67 0 0 128 64 0 0 128 191 6 185 44 194 0 0\r
+    0 0 255 255 255 255 0 0 191 67 0 128 184 67 0 0 0 65 0 0 128 191 104\r
+    69 36 66 0 0 0 0 255 255 255 255 0 0 184 67 0 128 192 67 0 0 0 65 0\r
+    0 128 191 86 62 116 194 0 0 0 0 255 255 255 255 0 0 152 67 0 0 219\r
+    67 0 0 128 64 0 0 128 191 114 204 89 66 0 0 0 0 255 255 255 255 0\r
+    128 187 67 0 128 190 67 0 0 192 64 0 0 128 191 68 182 153 66 0 0 0 0\r
+    255 255 255 255 0 0 160 67 0 128 214 67 0 0 0 65 0 0 128 191 31 61\r
+    162 66 0 0 0 0 255 255 255 255 0 0 227 67 0 128 142 67 0 0 192 64 0\r
+    0 128 191 148 41 117 66 0 0 0 0 255 255 255 255 0 0 193 67 0 0 188\r
+    67 0 0 0 65 0 0 128 191 138 64 77 194 0 0 0 0 255 255 255 255 0 128\r
+    164 67 0 0 214 67 0 0 192 64 0 0 128 191 6 126 125 194 0 0 0 0 255\r
+    255 255 255 0 0 189 67 0 0 193 67 0 0 64 65 0 0 128 191 101 217 151\r
+    66 0 0 0 0 255 255 255 255 0 128 181 67 0 0 201 67 0 0 64 65 0 0 128\r
+    191 104 200 149 66 0 0 0 0 255 255 255 255 0 0 247 67 0 0 96 67 0 0\r
+    192 64 0 0 128 191 181 82 29 194 0 0 0 0 255 255 255 255 0 0 246 67\r
+    0 0 103 67 0 0 128 64 0 0 128 191 166 136 90 66 0 0 0 0 255 255 255\r
+    255 0 0 168 67 0 0 214 67 0 0 192 64 0 0 128 191 242 10 52 66 0 0 0\r
+    0 255 255 255 255 0 128 190 67 0 128 197 67 0 0 192 64 0 0 128 191\r
+    198 92 96 194 0 0 0 0 255 255 255 255 0 0 195 67 0 0 195 67 0 0 192\r
+    64 0 0 128 191 234 161 61 194 0 0 0 0 255 255 255 255 0 0 209 67 0 0\r
+    180 67 0 0 0 65 0 0 128 191 106 203 41 194 0 0 0 0 255 255 255 255 0\r
+    0 147 67 0 128 233 67 0 0 128 64 0 0 128 191 230 30 133 66 0 0 0 0\r
+    255 255 255 255 0 0 176 67 0 128 212 67 0 0 128 65 0 0 128 191 24\r
+    230 29 66 0 0 0 0 255 255 255 255 0 0 147 67 0 128 236 67 0 0 192 64\r
+    0 0 128 191 226 42 91 194 0 0 0 0 255 255 255 255 0 0 2 68 0 0 73 67\r
+    0 0 128 64 0 0 128 191 94 167 65 66 0 0 0 0 255 255 255 255 0 0 188\r
+    67 0 128 207 67 0 0 176 65 0 0 128 191 186 180 129 194 0 0 0 0 255\r
+    255 255 255 0 128 161 67 0 0 229 67 0 0 64 65 0 0 128 191 3 255 138\r
+    194 0 0 0 0 255 255 255 255 0 0 208 67 0 128 188 67 0 0 176 65 0 0\r
+    128 191 235 67 185 66 0 0 0 0 255 255 255 255 0 0 152 67 0 0 237 67\r
+    0 0 128 64 0 0 128 191 110 168 98 66 0 0 0 0 255 255 255 255 0 128\r
+    180 67 0 128 216 67 0 0 0 65 0 0 128 191 170 72 30 66 0 0 0 0 255\r
+    255 255 255 0 0 158 67 0 0 234 67 0 0 192 64 0 0 128 191 56 100 109\r
+    66 0 0 0 0 255 255 255 255 0 128 177 67 0 0 220 67 0 0 0 65 0 0 128\r
+    191 87 120 39 194 0 0 0 0 255 255 255 255 0 192 3 68 0 0 80 67 0 0\r
+    192 64 0 0 128 191 26 164 78 66 0 0 0 0 255 255 255 255 0 128 155 67\r
+    0 0 237 67 0 0 192 64 0 0 128 191 173 205 100 194 0 0 0 0 255 255\r
+    255 255 0 128 217 67 0 0 183 67 0 0 128 64 0 0 128 191 120 5 129 194\r
+    0 0 0 0 255 255 255 255 0 0 236 67 0 0 159 67 0 0 192 64 0 0 128 191\r
+    188 180 90 66 0 0 0 0 255 255 255 255 0 0 166 67 0 0 232 67 0 0 192\r
+    64 0 0 128 191 138 129 85 66 0 0 0 0 255 255 255 255 0 0 207 67 0\r
+    128 198 67 0 0 128 65 0 0 128 191 250 109 79 194 0 0 0 0 255 255 255\r
+    255 0 0 222 67 0 0 182 67 0 0 64 65 0 0 128 191 12 65 152 66 0 0 0 0\r
+    255 255 255 255 0 128 202 67 0 0 205 67 0 0 64 65 0 0 128 191 214\r
+    218 11 66 0 0 0 0 255 255 255 255 0 0 7 68 0 0 74 67 0 0 192 64 0 0\r
+    128 191 106 165 31 66 0 0 0 0 255 255 255 255 0 0 219 67 0 128 187\r
+    67 0 0 192 64 0 0 128 191 106 151 85 194 0 0 0 0 255 255 255 255 0\r
+    128 246 67 0 0 158 67 0 0 128 64 0 0 128 191 26 216 67 66 0 0 0 0\r
+    255 255 255 255 0 0 240 67 0 0 170 67 0 0 192 64 0 0 128 191 73 24\r
+    153 66 0 0 0 0 255 255 255 255 0 128 176 67 0 128 235 67 0 0 128 64\r
+    0 0 128 191 248 52 120 194 0 0 0 0 255 255 255 255 0 0 5 68 0 0 131\r
+    67 0 0 0 65 0 0 128 191 188 231 147 194 0 0 0 0 255 255 255 255 0 0\r
+    198 67 0 0 222 67 0 0 128 64 0 0 128 191 140 33 103 194 0 0 0 0 255\r
+    255 255 255 0 128 8 68 0 0 123 67 0 0 192 64 0 0 128 191 122 140 77\r
+    66 0 0 0 0 255 255 255 255 0 128 211 67 0 0 217 67 0 0 128 64 0 0\r
+    128 191 140 176 64 66 0 0 0 0 255 255 255 255 0 0 213 67 0 128 221\r
+    67 0 0 0 65 0 0 128 191 20 100 84 66 0 0 0 0 255 255 255 255 0 0 224\r
+    67 0 0 216 67 0 0 128 64 0 0 128 191 39 68 91 194 0 0 0 0 255 255\r
+    255 255 0 128 217 67 0 0 224 67 0 0 192 64 0 0 128 191 168 163 51\r
+    194 0 0 0 0 255 255 255 255 0 64 10 68 0 128 150 67 0 0 64 65 0 0\r
+    128 191 74 9 68 66 0 0 0 0 255 255 255 255 0 128 225 67 0 128 221 67\r
+    0 0 0 65 0 0 128 191 12 83 58 194 0 0 0 0 255 255 255 255 0 0 231 67\r
+    0 0 221 67 0 0 192 64 0 0 128 191 214 67 26 66 0 0 0 0 255 255 255\r
+    255 0 128 4 68 0 128 203 67 0 0 64 65 0 0 128 191 150 239 135 66 0 0\r
+    0 0 255 255 255 255 0 64 7 68 0 0 202 67 0 0 192 64 0 0 128 191 144\r
+    27 116 194 0 0 0 0 255 255 255 255 0 64 11 68 0 0 192 67 0 0 128 64\r
+    0 0 128 191 242 10 94 66 0 0 0 0 255 255 255 255 0 64 5 68 0 0 211\r
+    67 0 0 128 65 0 0 128 191 31 144 22 194 0 0 0 0 255 255 255 255 0\r
+    128 4 68 0 0 230 67 0 0 192 64 0 0 128 191 212 25 54 66 0 0 0 0 255\r
+    255 255 255</data></ResultVectorData>\r
+</opencv_storage>\r
diff --git a/opencv_extra/testdata/cv/detectors/surf.xml b/opencv_extra/testdata/cv/detectors/surf.xml
new file mode 100644 (file)
index 0000000..ecb68e0
--- /dev/null
@@ -0,0 +1,116 @@
+<?xml version="1.0"?>\r
+<opencv_storage>\r
+<ResultVectorData type_id="opencv-matrix">\r
+  <rows>1</rows>\r
+  <cols>2268</cols>\r
+  <dt>u</dt>\r
+  <data>\r
+    47 121 48 67 157 61 77 67 0 0 0 66 224 109 142 67 149 224 61 70 1 0\r
+    0 0 255 255 255 255 32 0 53 67 65 48 103 67 0 0 240 65 188 103 163\r
+    66 120 231 212 69 1 0 0 0 255 255 255 255 45 48 36 67 171 58 129 67\r
+    0 0 176 65 173 151 176 67 96 8 62 70 1 0 0 0 255 255 255 255 245 20\r
+    67 67 74 25 123 67 0 0 96 65 84 195 159 67 182 100 155 69 1 0 0 0\r
+    255 255 255 255 131 92 87 67 70 81 118 67 0 0 96 65 141 66 154 67\r
+    194 243 247 69 1 0 0 0 255 255 255 255 107 140 75 67 189 160 137 67\r
+    0 0 0 66 129 29 178 67 242 105 245 69 1 0 0 0 255 255 255 255 24 228\r
+    134 67 134 139 117 67 0 0 168 65 252 14 185 66 22 13 221 69 1 0 0 0\r
+    255 255 255 255 21 88 113 67 143 110 139 67 0 0 168 65 178 128 60 67\r
+    154 146 135 69 1 0 0 0 255 255 255 255 80 194 162 67 205 61 120 67 0\r
+    0 176 65 202 129 166 67 36 48 147 69 1 0 0 0 255 255 255 255 102 39\r
+    179 67 228 16 70 67 0 0 168 65 123 69 135 67 119 63 194 69 1 0 0 0\r
+    255 255 255 255 156 249 127 67 246 53 168 67 0 0 96 65 9 227 212 66\r
+    185 16 131 69 1 0 0 0 255 255 255 255 20 118 145 67 193 88 159 67 0\r
+    0 168 65 80 49 173 67 49 180 166 69 1 0 0 0 255 255 255 255 175 168\r
+    54 67 138 231 198 67 0 0 176 65 54 182 241 65 174 148 103 69 1 0 0 0\r
+    255 255 255 255 33 206 151 67 74 73 158 67 0 0 168 65 226 149 113 66\r
+    27 100 101 69 1 0 0 0 255 255 255 255 135 246 197 67 96 198 69 67 0\r
+    0 168 65 6 4 135 67 22 113 169 69 1 0 0 0 255 255 255 255 218 191\r
+    178 67 127 154 130 67 0 0 240 65 141 3 55 67 49 80 88 69 1 0 0 0 255\r
+    255 255 255 41 191 129 67 156 196 179 67 0 0 112 65 65 56 129 67 245\r
+    3 165 69 1 0 0 0 255 255 255 255 31 254 144 67 73 254 169 67 0 0 112\r
+    65 91 238 126 67 39 65 192 69 1 0 0 0 255 255 255 255 135 44 197 67\r
+    106 167 83 67 0 0 112 65 179 53 191 66 39 118 60 70 1 0 0 0 255 255\r
+    255 255 77 107 153 67 128 125 163 67 0 0 152 65 227 85 181 64 45 149\r
+    105 70 1 0 0 0 255 255 255 255 83 54 186 67 52 230 124 67 0 0 248 65\r
+    97 194 235 66 74 39 7 70 1 0 0 0 255 255 255 255 62 81 75 67 92 188\r
+    201 67 0 0 168 65 114 233 34 66 8 182 175 69 1 0 0 0 255 255 255 255\r
+    63 84 41 67 6 224 211 67 0 0 160 65 135 79 156 67 97 213 77 70 1 0 0\r
+    0 255 255 255 255 68 143 200 67 230 158 97 67 0 0 248 65 57 120 86\r
+    67 201 99 68 70 1 0 0 0 255 255 255 255 184 32 202 67 70 8 102 67 0\r
+    0 96 65 50 194 229 64 245 107 144 69 1 0 0 0 255 255 255 255 20 101\r
+    52 67 199 118 219 67 0 0 168 65 133 16 81 67 186 42 36 70 1 0 0 0\r
+    255 255 255 255 177 76 218 67 140 174 74 67 0 0 112 65 239 4 130 67\r
+    30 22 245 69 1 0 0 0 255 255 255 255 50 103 206 67 216 119 125 67 0\r
+    0 160 65 244 58 57 67 59 45 137 69 1 0 0 0 255 255 255 255 201 171\r
+    174 67 244 52 171 67 0 0 168 65 111 80 13 67 206 112 190 69 1 0 0 0\r
+    255 255 255 255 186 219 219 67 229 185 88 67 0 0 168 65 126 154 88\r
+    65 228 132 103 69 1 0 0 0 255 255 255 255 5 14 163 67 201 22 183 67\r
+    0 0 248 65 218 54 123 67 5 245 170 69 1 0 0 0 255 255 255 255 238\r
+    101 164 67 57 59 182 67 0 0 168 65 204 69 114 67 149 35 219 69 1 0 0\r
+    0 255 255 255 255 135 152 44 67 190 225 229 67 0 0 176 65 225 245 4\r
+    67 134 99 30 70 1 0 0 0 255 255 255 255 61 176 217 67 191 195 100 67\r
+    0 0 168 65 197 215 74 67 230 56 218 69 1 0 0 0 255 255 255 255 252\r
+    176 96 67 166 92 219 67 0 0 168 65 32 211 31 66 184 52 38 70 1 0 0 0\r
+    255 255 255 255 199 178 210 67 118 35 128 67 0 0 168 65 0 27 60 67\r
+    52 104 185 69 1 0 0 0 255 255 255 255 65 201 60 67 4 9 228 67 0 0\r
+    160 65 92 129 234 65 115 87 229 69 1 0 0 0 255 255 255 255 5 77 56\r
+    67 30 57 232 67 0 0 176 65 94 191 105 65 10 119 159 69 1 0 0 0 255\r
+    255 255 255 139 45 175 67 144 38 178 67 0 0 168 65 162 180 161 67 11\r
+    239 120 69 1 0 0 0 255 255 255 255 11 41 150 67 27 180 199 67 0 0\r
+    152 65 35 3 121 67 241 231 182 69 1 0 0 0 255 255 255 255 190 163\r
+    194 67 231 194 162 67 0 0 152 65 24 104 149 66 86 162 29 70 1 0 0 0\r
+    255 255 255 255 238 75 159 67 223 143 198 67 0 0 248 65 250 16 213\r
+    65 70 127 50 70 1 0 0 0 255 255 255 255 142 201 148 67 74 76 207 67\r
+    0 0 168 65 10 91 30 67 19 77 78 70 1 0 0 0 255 255 255 255 114 181\r
+    56 67 226 165 239 67 0 0 168 65 92 185 124 67 201 79 246 69 1 0 0 0\r
+    255 255 255 255 242 150 186 67 146 62 179 67 0 0 168 65 150 76 154\r
+    67 247 25 144 69 1 0 0 0 255 255 255 255 203 195 181 67 22 47 184 67\r
+    0 0 112 65 150 242 36 67 30 180 16 70 1 0 0 0 255 255 255 255 92 254\r
+    237 67 156 237 77 67 0 0 0 66 64 80 135 67 2 29 233 69 1 0 0 0 255\r
+    255 255 255 10 78 97 67 161 64 236 67 0 0 136 65 239 100 210 66 42\r
+    18 220 69 1 0 0 0 255 255 255 255 144 47 172 67 191 245 198 67 0 0\r
+    112 65 68 32 142 67 146 18 13 70 1 0 0 0 255 255 255 255 238 149 93\r
+    67 124 57 240 67 0 0 160 65 225 236 186 66 108 170 112 70 1 0 0 0\r
+    255 255 255 255 128 211 190 67 119 117 184 67 0 0 160 65 165 199 187\r
+    66 87 63 163 69 1 0 0 0 255 255 255 255 44 114 187 67 247 67 190 67\r
+    0 0 96 65 245 32 178 67 231 94 97 70 1 0 0 0 255 255 255 255 101 107\r
+    205 67 67 199 171 67 0 0 168 65 112 170 4 66 46 67 144 69 1 0 0 0\r
+    255 255 255 255 243 62 90 67 170 170 244 67 0 0 160 65 144 249 70 67\r
+    193 22 30 70 1 0 0 0 255 255 255 255 131 189 215 67 123 137 162 67 0\r
+    0 40 66 188 245 74 67 75 1 136 69 1 0 0 0 255 255 255 255 11 101 247\r
+    67 139 192 94 67 0 0 168 65 146 64 73 67 188 150 136 69 1 0 0 0 255\r
+    255 255 255 29 64 199 67 38 33 191 67 0 0 240 65 102 197 186 66 126\r
+    70 47 70 1 0 0 0 255 255 255 255 11 43 147 67 93 188 236 67 0 0 128\r
+    65 56 129 130 67 207 68 223 69 1 0 0 0 255 255 255 255 244 224 161\r
+    67 193 53 229 67 0 0 240 65 239 120 37 66 50 249 65 70 1 0 0 0 255\r
+    255 255 255 203 113 212 67 154 240 184 67 0 0 216 65 196 184 147 67\r
+    72 117 180 69 1 0 0 0 255 255 255 255 62 196 236 67 95 224 164 67 0\r
+    0 168 65 248 164 207 64 51 127 191 69 1 0 0 0 255 255 255 255 122\r
+    248 3 68 77 135 118 67 0 0 240 65 49 2 84 67 41 104 162 69 1 0 0 0\r
+    255 255 255 255 60 188 239 67 243 225 169 67 0 0 144 65 47 234 187\r
+    65 223 87 67 70 1 0 0 0 255 255 255 255 222 213 6 68 117 22 118 67 0\r
+    0 168 65 104 217 73 67 37 24 42 70 1 0 0 0 255 255 255 255 129 11\r
+    237 67 203 77 181 67 0 0 184 65 114 57 85 67 115 145 125 69 1 0 0 0\r
+    255 255 255 255 113 47 202 67 236 36 220 67 0 0 176 65 54 140 174 67\r
+    140 19 28 70 1 0 0 0 255 255 255 255 73 15 177 67 10 93 241 67 0 0\r
+    168 65 181 88 178 66 104 123 119 69 1 0 0 0 255 255 255 255 111 44\r
+    169 67 169 47 249 67 0 0 160 65 78 226 187 66 113 162 222 69 1 0 0 0\r
+    255 255 255 255 144 248 165 67 9 84 252 67 0 0 96 65 110 120 154 66\r
+    255 31 242 69 1 0 0 0 255 255 255 255 26 156 212 67 238 165 221 67 0\r
+    0 160 65 138 150 79 67 210 111 17 70 1 0 0 0 255 255 255 255 42 201\r
+    223 67 176 109 215 67 0 0 96 65 216 228 144 67 251 48 251 69 1 0 0 0\r
+    255 255 255 255 230 121 217 67 171 56 224 67 0 0 128 65 98 80 246 66\r
+    164 82 167 69 1 0 0 0 255 255 255 255 214 8 176 67 139 66 1 68 0 0\r
+    112 65 16 40 165 66 21 75 120 70 1 0 0 0 255 255 255 255 74 153 242\r
+    67 97 106 197 67 0 0 4 66 193 167 59 67 144 19 176 69 1 0 0 0 255\r
+    255 255 255 236 220 243 67 59 239 196 67 0 0 176 65 162 254 59 67 29\r
+    114 195 69 1 0 0 0 255 255 255 255 82 192 227 67 73 189 215 67 0 0\r
+    160 65 44 160 147 67 50 2 154 69 1 0 0 0 255 255 255 255 207 145 225\r
+    67 7 73 221 67 0 0 168 65 130 24 211 66 167 42 191 69 1 0 0 0 255\r
+    255 255 255 6 36 4 68 33 68 179 67 0 0 232 65 121 183 47 63 172 74\r
+    117 69 1 0 0 0 255 255 255 255 215 135 210 67 10 240 242 67 0 0 160\r
+    65 23 205 204 66 7 158 131 69 1 0 0 0 255 255 255 255 51 128 210 67\r
+    24 52 247 67 0 0 112 65 246 195 64 67 22 86 141 69 1 0 0 0 255 255\r
+    255 255 148 234 0 68 162 202 240 67 0 0 176 65 92 170 148 67 247 14\r
+    93 69 1 0 0 0 255 255 255 255</data></ResultVectorData>\r
+</opencv_storage>\r
diff --git a/opencv_extra/testdata/cv/shared/graffiti.png b/opencv_extra/testdata/cv/shared/graffiti.png
new file mode 100644 (file)
index 0000000..7d3acc9
Binary files /dev/null and b/opencv_extra/testdata/cv/shared/graffiti.png differ