~paparazzi-uav/paparazzi/v5.0-manual

« back to all changes in this revision

Viewing changes to sw/ext/opencv_bebop/opencv/samples/cpp/inpaint.cpp

  • Committer: Paparazzi buildbot
  • Date: 2016-05-18 15:00:29 UTC
  • Revision ID: felix.ruess+docbot@gmail.com-20160518150029-e8lgzi5kvb4p7un9
Manual import commit 4b8bbb730080dac23cf816b98908dacfabe2a8ec from v5.0 branch.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#include "opencv2/imgcodecs.hpp"
 
2
#include "opencv2/highgui/highgui.hpp"
 
3
#include "opencv2/imgproc/imgproc.hpp"
 
4
#include "opencv2/photo/photo.hpp"
 
5
 
 
6
#include <iostream>
 
7
 
 
8
using namespace cv;
 
9
using namespace std;
 
10
 
 
11
static void help()
 
12
{
 
13
    cout << "\nCool inpainging demo. Inpainting repairs damage to images by floodfilling the damage \n"
 
14
            << "with surrounding image areas.\n"
 
15
            "Using OpenCV version %s\n" << CV_VERSION << "\n"
 
16
    "Usage:\n"
 
17
        "./inpaint [image_name -- Default ../data/fruits.jpg]\n" << endl;
 
18
 
 
19
    cout << "Hot keys: \n"
 
20
        "\tESC - quit the program\n"
 
21
        "\tr - restore the original image\n"
 
22
        "\ti or SPACE - run inpainting algorithm\n"
 
23
        "\t\t(before running it, paint something on the image)\n" << endl;
 
24
}
 
25
 
 
26
Mat img, inpaintMask;
 
27
Point prevPt(-1,-1);
 
28
 
 
29
static void onMouse( int event, int x, int y, int flags, void* )
 
30
{
 
31
    if( event == EVENT_LBUTTONUP || !(flags & EVENT_FLAG_LBUTTON) )
 
32
        prevPt = Point(-1,-1);
 
33
    else if( event == EVENT_LBUTTONDOWN )
 
34
        prevPt = Point(x,y);
 
35
    else if( event == EVENT_MOUSEMOVE && (flags & EVENT_FLAG_LBUTTON) )
 
36
    {
 
37
        Point pt(x,y);
 
38
        if( prevPt.x < 0 )
 
39
            prevPt = pt;
 
40
        line( inpaintMask, prevPt, pt, Scalar::all(255), 5, 8, 0 );
 
41
        line( img, prevPt, pt, Scalar::all(255), 5, 8, 0 );
 
42
        prevPt = pt;
 
43
        imshow("image", img);
 
44
    }
 
45
}
 
46
 
 
47
 
 
48
int main( int argc, char** argv )
 
49
{
 
50
    cv::CommandLineParser parser(argc, argv, "{help h||}{@image|../data/fruits.jpg|}");
 
51
    if (parser.has("help"))
 
52
    {
 
53
        help();
 
54
        return 0;
 
55
    }
 
56
    string filename = parser.get<string>("@image");
 
57
    Mat img0 = imread(filename, -1);
 
58
    if(img0.empty())
 
59
    {
 
60
        cout << "Couldn't open the image " << filename << ". Usage: inpaint <image_name>\n" << endl;
 
61
        return 0;
 
62
    }
 
63
 
 
64
    namedWindow( "image", 1 );
 
65
 
 
66
    img = img0.clone();
 
67
    inpaintMask = Mat::zeros(img.size(), CV_8U);
 
68
 
 
69
    imshow("image", img);
 
70
    setMouseCallback( "image", onMouse, 0 );
 
71
 
 
72
    for(;;)
 
73
    {
 
74
        char c = (char)waitKey();
 
75
 
 
76
        if( c == 27 )
 
77
            break;
 
78
 
 
79
        if( c == 'r' )
 
80
        {
 
81
            inpaintMask = Scalar::all(0);
 
82
            img0.copyTo(img);
 
83
            imshow("image", img);
 
84
        }
 
85
 
 
86
        if( c == 'i' || c == ' ' )
 
87
        {
 
88
            Mat inpainted;
 
89
            inpaint(img, inpaintMask, inpainted, 3, INPAINT_TELEA);
 
90
            imshow("inpainted image", inpainted);
 
91
        }
 
92
    }
 
93
 
 
94
    return 0;
 
95
}