#include <iostream>
#include <stdlib.h>
 
 
{
    cout << endl;
    cout << "Cloning Module" << endl;
    cout << "---------------" << endl;
    cout << "Options: " << endl;
    cout << endl;
    cout << "1) Normal Cloning " << endl;
    cout << "2) Mixed Cloning " << endl;
    cout << "3) Monochrome Transfer " << endl;
    cout << "4) Local Color Change " << endl;
    cout << "5) Local Illumination Change " << endl;
    cout << "6) Texture Flattening " << endl;
    cout << endl;
    cout << "Press number 1-6 to choose from above techniques: ";
    int num = 1;
    cin >> num;
    cout << endl;
 
    if(num == 1)
    {
        string folder =  "cloning/Normal_Cloning/";
        string original_path1 = folder + "source1.png";
        string original_path2 = folder + "destination1.png";
        string original_path3 = folder + "mask.png";
 
        Mat source = imread(original_path1, IMREAD_COLOR);
 
        Mat destination = imread(original_path2, IMREAD_COLOR);
 
        Mat mask = imread(original_path3, IMREAD_COLOR);
 
 
        {
            cout << "Could not load source image " << original_path1 << endl;
            exit(0);
        }
        {
            cout << "Could not load destination image " << original_path2 << endl;
            exit(0);
        }
        if(mask.empty())
        {
            cout << "Could not load mask image " << original_path3 << endl;
            exit(0);
        }
 
 
        seamlessClone(source, destination, mask, p, result, 1);
 
        imshow("Output",result);
        imwrite(folder + "cloned.png", result);
    }
    else if(num == 2)
    {
        string folder = "cloning/Mixed_Cloning/";
        string original_path1 = folder + "source1.png";
        string original_path2 = folder + "destination1.png";
        string original_path3 = folder + "mask.png";
 
        Mat source = imread(original_path1, IMREAD_COLOR);
 
        Mat destination = imread(original_path2, IMREAD_COLOR);
 
        Mat mask = imread(original_path3, IMREAD_COLOR);
 
 
        {
            cout << "Could not load source image " << original_path1 << endl;
            exit(0);
        }
        {
            cout << "Could not load destination image " << original_path2 << endl;
            exit(0);
        }
        if(mask.empty())
        {
            cout << "Could not load mask image " << original_path3 << endl;
            exit(0);
        }
 
        p.
x = destination.
size().width/2;
 
        p.
y = destination.
size().height/2;
 
 
        seamlessClone(source, destination, mask, p, result, 2);
 
        imshow("Output",result);
        imwrite(folder + "cloned.png", result);
    }
    else if(num == 3)
    {
        string folder = "cloning/Monochrome_Transfer/";
        string original_path1 = folder + "source1.png";
        string original_path2 = folder + "destination1.png";
        string original_path3 = folder + "mask.png";
 
        Mat source = imread(original_path1, IMREAD_COLOR);
 
        Mat destination = imread(original_path2, IMREAD_COLOR);
 
        Mat mask = imread(original_path3, IMREAD_COLOR);
 
 
        {
            cout << "Could not load source image " << original_path1 << endl;
            exit(0);
        }
        {
            cout << "Could not load destination image " << original_path2 << endl;
            exit(0);
        }
        if(mask.empty())
        {
            cout << "Could not load mask image " << original_path3 << endl;
            exit(0);
        }
 
        p.
x = destination.
size().width/2;
 
        p.
y = destination.
size().height/2;
 
 
        seamlessClone(source, destination, mask, p, result, 3);
 
        imshow("Output",result);
        imwrite(folder + "cloned.png", result);
    }
    else if(num == 4)
    {
        string folder = "cloning/Color_Change/";
        string original_path1 = folder + "source1.png";
        string original_path2 = folder + "mask.png";
 
        Mat source = imread(original_path1, IMREAD_COLOR);
 
        Mat mask = imread(original_path2, IMREAD_COLOR);
 
 
        {
            cout << "Could not load source image " << original_path1 << endl;
            exit(0);
        }
        if(mask.empty())
        {
            cout << "Could not load mask image " << original_path2 << endl;
            exit(0);
        }
 
 
        colorChange(source, mask, result, 1.5, .5, .5);
 
        imshow("Output",result);
        imwrite(folder + "cloned.png", result);
    }
    else if(num == 5)
    {
        string folder = "cloning/Illumination_Change/";
        string original_path1 = folder + "source1.png";
        string original_path2 = folder + "mask.png";
 
        Mat source = imread(original_path1, IMREAD_COLOR);
 
        Mat mask = imread(original_path2, IMREAD_COLOR);
 
 
        {
            cout << "Could not load source image " << original_path1 << endl;
            exit(0);
        }
        if(mask.empty())
        {
            cout << "Could not load mask image " << original_path2 << endl;
            exit(0);
        }
 
 
        illuminationChange(source, mask, result, 0.2f, 0.4f);
 
        imshow("Output",result);
        imwrite(folder + "cloned.png", result);
    }
    else if(num == 6)
    {
        string folder = "cloning/Texture_Flattening/";
        string original_path1 = folder + "source1.png";
        string original_path2 = folder + "mask.png";
 
        Mat source = imread(original_path1, IMREAD_COLOR);
 
        Mat mask = imread(original_path2, IMREAD_COLOR);
 
 
        {
            cout << "Could not load source image " << original_path1 << endl;
            exit(0);
        }
        if(mask.empty())
        {
            cout << "Could not load mask image " << original_path2 << endl;
            exit(0);
        }
 
 
        textureFlattening(source, mask, result, 30, 45, 3);
 
        imshow("Output",result);
        imwrite(folder + "cloned.png", result);
    }
    waitKey(0);
}
n-dimensional dense array class
Definition mat.hpp:951
 
MatSize size
Definition mat.hpp:2448
 
bool empty() const
Returns true if the array has no elements.
 
_Tp y
y coordinate of the point
Definition types.hpp:202
 
_Tp x
x coordinate of the point
Definition types.hpp:201
 
int main(int argc, char *argv[])
Definition highgui_qt.cpp:3