Repository for OpenCV's extra modules
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

87 lines
2.3 KiB

// This file is part of OpenCV project.
// It is subject to the license terms in the LICENSE file found in the top-level directory
// of this distribution and at http://opencv.org/license.html.
// Include relevant headers
#include <iostream>
#include "opencv2/highgui.hpp"
#include <opencv2/core.hpp>
#include <opencv2/imgproc.hpp>
#include <opencv2/alphamat.hpp>
// Set namespaces
using namespace std;
using namespace cv;
using namespace cv::alphamat;
// Set the usage parameter names
const char* keys =
"{img || input image name}"
"{tri || input trimap image name}"
"{out || output image name}"
"{help h || print help message}"
;
int main(int argc, char* argv[])
{
CommandLineParser parser(argc, argv, keys);
parser.about("This sample demonstrates Information Flow Alpha Matting");
if (parser.has("help"))
{
parser.printMessage();
return 0;
}
// Read the paths to the input image, input trimap and the location of the output image.
string img_path = parser.get<std::string>("img");
string trimap_path = parser.get<std::string>("tri");
string result_path = parser.get<std::string>("out");
// Make sure the user inputs paths to the input image and trimap
if (!parser.check()
|| img_path.empty() || trimap_path.empty())
{
parser.printMessage();
parser.printErrors();
return 1;
}
Mat image, tmap;
// Read the input image
image = imread(img_path, IMREAD_COLOR);
if (image.empty())
{
printf("Cannot read image file: '%s'\n", img_path.c_str());
return 1;
}
// Read the trimap
tmap = imread(trimap_path, IMREAD_GRAYSCALE);
if (tmap.empty())
{
printf("Cannot read trimap file: '%s'\n", trimap_path.c_str());
return 1;
}
Mat result;
// Perform information flow alpha matting
infoFlow(image, tmap, result);
if (result_path.empty())
{
// Show the alpha matte if a result filepath is not provided.
namedWindow("result alpha matte", WINDOW_NORMAL);
imshow("result alpha matte", result);
waitKey(0);
}
else
{
// Save the alphamatte
imwrite(result_path, result);
printf("Result saved: '%s'\n", result_path.c_str());
}
return 0;
}